linux make java版本,告诉make是否在Windows或Linux上运行

更新请阅读这个类似但更好的答案:https://stackoverflow.com/a/14777895/938111

make (和 gcc )可以使用Cygwin或MinGW在MS-Windows上轻松安装 .

正如@ldigas所说, make 可以使用 UNAME:=$(shell uname) 检测平台(命令 uname 也由Cygwin或MinGW安装程序安装) .

下面,我提供了一个基于 make (和 gcc )的完整示例来解释如何构建共享库: *.so 或 *.dll ,具体取决于平台 .

这个例子基本/简单易于理解:-)

我们来看看五个文件:

├── app

│ └── Makefile

│ └── main.c

└── lib

└── Makefile

└── hello.h

└── hello.c

Makefiles

app/Makefile

app.exe: main.o

gcc -o $@ $^ -L../lib -lhello

# '-o $@' => output file => $@ = the target file (app.exe)

# ' $^' => no options => Link all depended files

# => $^ = main.o and other if any

# '-L../lib' => look for libraries in directory ../lib

# '-lhello => use shared library hello (libhello.so or hello.dll)

%.o: %.c

gcc -o $@ -c $< -I ../lib

# '-o $@' => output file => $@ = the target file (main.o)

# '-c $ COMPILE the first depended file (main.c)

# '-I ../lib' => look for headers (*.h) in directory ../lib

clean:

rm -f *.o *.so *.dll *.exe

lib/Makefile

UNAME := $(shell uname)

ifeq ($(UNAME), Linux)

TARGET = libhello.so

else

TARGET = hello.dll

endif

$(TARGET): hello.o

gcc -o $@ $^ -shared

# '-o $@' => output file => $@ = libhello.so or hello.dll

# ' $^' => no options => Link all depended files => $^ = hello.o

# '-shared' => generate shared library

%.o: %.c

gcc -o $@ -c $< -fPIC

# '-o $@' => output file => $@ = the target file (hello.o)

# '-c $ compile the first depended file (hello.c)

# '-fPIC' => Position-Independent Code (required for shared lib)

clean:

rm -f *.o *.so *.dll *.exe

源代码

app/main.c

#include "hello.h" //hello()

#include //puts()

int main()

{

const char* str = hello();

puts(str);

}

lib/hello.h

#ifndef __HELLO_H__

#define __HELLO_H__

const char* hello();

#endif

lib/hello.c

#include "hello.h"

const char* hello()

{

return "hello";

}

构建

修复 Makefiles copy(通过制表替换前导空格) .

> sed -i 's/^ */\t/' */Makefile

两个平台上的 make 命令相同 . 这是MS-Windows上的输出(删除了不必要的行) .

> cd lib

> make clean

> make

gcc -o hello.o -c hello.c -fPIC

gcc -o hello.dll hello.o -shared

> cd ../app

> make clean

> make

gcc -o main.o -c main.c -I ../lib

gcc -o app.exe main.o -L../lib -lhello

跑步

应用程序需要知道共享库的位置 .

在MS-Windows上,简单/基本/愚蠢的方法是复制应用程序所在的库:

> cp -v lib/hello.dll app

`lib/hello.dll' -> `app/hello.dll'

在Linux上,使用 LD_LIBRARY_PATH 环境变量:

> export LD_LIBRARY_PATH=lib

两个平台上的运行命令行和输出相同:

> app/app.exe

hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MPI多机器实现并行计算

最近使用一个系统的分布式版本搭建测试环境&#xff0c;该系统是基于MPI实现的并行计算&#xff0c;MPI是传统基于msg的系统&#xff0c;这个框架非常灵活&#xff0c;对程序的结构没有太多约束&#xff0c;高效实用简单&#xff0c;下面是MPI在多台机器上实现并行计算的过程。…

Jenkins_获取源码编译并启动服务(二)

一、创建Maven项目二、设置SVN信息三、设置构建触发器四、设置Maven命令五、设置构建后发邮件信息&#xff08;参考文章一&#xff09;六、设置构建后拷贝文件到远程机器并执行命令来自为知笔记(Wiz)

php 判断页面加载完,所有ajax执行完且页面加载完判断

jquery ajax&load 方法导致 js效果不显示或显示后由于加载后ajax 重新布局页面导致效果错误。解决思路&#xff1a;需要在ajax get post 或 load 等执行完后再去执行方法就不会由于他们没执行完导致的最终错误。那么首先看load 方法定义&#xff1a;jQuery ajax - load() 方…

正确理解ThreadLocal

想必很多朋友对 ThreadLocal并不陌生&#xff0c;今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先&#xff0c;本文先谈一下对ThreadLocal的理 解&#xff0c;然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方&#xff0c;最后给出了两个应用场…

2018.7.10 个人博客文章=利用ORM创建分类和ORM的内置函数

昨天的注册收尾工作 其实就差了和MySql联系起来的部分&#xff0c;这部分很简单&#xff0c;首先要做的就是保存用户通过from传送过来的头像文件&#xff1a; """ 保存头像文件 """ file request.FILES.get(avatar) file_path os.path.join(st…

python 列表与元组的操作简介

上一篇&#xff1a;Python 序列通用操作介绍 列表 列表是可变的(mutable)——可以改变列表的内容&#xff0c;这不同于字符串和元组&#xff0c;字符串和元组都是不可变的。接下来讨论一下列表所提供的方法。 list函数 可以使用list函数来创建列表&#xff1a; list(Hello) [H,…

mfc嵌入matlab绘图窗口,将matlab的图嵌入MFC

【实例简介】VS调用matlab画图模块编译成的动态链接库&#xff0c;并在MFC显示。【实例截图】【核心代码】3b0582a3-4ea8-4a61-ba33-e448be563b88└── 将matlab的图嵌入MFC├── matlab_2010b与VS2008_混合编程的实现.pdf├── TestWithData│ ├── Debug│ │ ├─…

python multiprocessing 和tcp

#用类方法 服务端from socket import *from multiprocessing import Processimport osclass Myprocess(Process): def __init__(self, conn): self.conn conn super().__init__() def run(self): conn self.conn start True whil…

matlab 画三维花瓶,精美花瓶建模教程

1、首先&#xff0c;草图单位为mm&#xff0c;进入前视图绘制如图草图&#xff0c;花瓶的基本形状轮廓2、然后对草图进行旋转3、旋转出曲面后&#xff0c;在顶部边线新建一个基准面4、继续在前视图绘制草图&#xff0c;如图绘制一弧线5、然后进行旋转6、可以得到图示的两个曲面…

PKI系统相关知识点介绍

公钥基础设施&#xff08;Public Key Infrastructure&#xff0c;简称PKI&#xff09;是目前网络安全建设的基础与核心&#xff0c;是电子商务安全实施的基本保障&#xff0c;因此&#xff0c;对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析…

android 打印java堆栈,Android打印堆栈

java打印堆栈方法一&#xff1a;异常对象打印堆栈Exception e new Exception("this is a log");e.printStackTrace();方法二&#xff1a;Log打印获取异常的堆栈并打印Log.e(“dump_test”,Log.getStackTraceString(new Throwable()));C\C打印堆栈方法一&#xff1a;…

实际算法项目工程上手日志C/C++

#pragma once 为了保证头文件只被编译一次&#xff0c;通常放在头文件的顶部 #define IN #define OUT #define INOUT 这个只在逻辑上起作用&#xff0c; IN 表示输入参数&#xff0c;指针指向的值不会修改&#xff1b; OUT 表示输出参数&#xff0c;指针指向的值会修改&a…

Arduino 控制超声波测距模块

一.实物图 二.例子代码 用到数字2 和3 引脚,还有两个就是vcc GND两个阴脚,用模块连线比较简单 转载于:https://www.cnblogs.com/caoguo/p/4785700.html

Linux安装source-code-pro字体

2019独角兽企业重金招聘Python工程师标准>>> 1.下载source-code-pro字体 从GitHub下载 https://github.com/adobe-fonts/source-code-pro/releases 2.解压文件&#xff0c;将OTF格式的文件夹重新命名一下&#xff0c;这里我命名为source-code-pro&#xff0c;然后将…

dft对称性 matlab实验,数字信号处理实验指导书(审)

(0???2?)上对X(ej?)均匀采样得到?X(k)?X(ej?)??2?k/N??n???x(n)e?j2?kn/N 0?k?N?1可以看到X(k)也是频域上的有限长序列&#xff0c;长度为N。序列X(k)称为序列x(n)的N点DFT。N称为DFT变换区间长度。 通常表示WN?e?j2?/N可将定义式表示为?X(k)??x(n)…

PI

并不是所有东西都可以套PI的&#xff0c;只有满足上述这类的数学关系才可以。 转速经过PI调节得到电流也是有原因的。从下图中可以发现&#xff0c;转速 k*Iq/s&#xff0c;s是拉普拉斯算子&#xff0c;所以也是满足积分&#xff0c;比例关系的。 转载于:https://www.cnblogs.…

AOP之AspectJ简单使用

为什么80%的码农都做不了架构师&#xff1f;>>> 参考文章&#xff1a; 使用AspectJ在Android中实现Aop 深入理解Android之AOP自动打印日志主要知识点&#xff1a; 主要是JPoint、pointcuts、advice以及他们之间的关系可以通过aj文件、或AspectJ注解的Java文件实现A…

matlab drawnow连成曲线,precision recall曲线Matlab实现

在用哈希进行检索时&#xff0c;常会用到precision recall曲线对其性能进行定量评价。precision recall的定义在信息检索评价指标中已做了详细说明&#xff0c;这里再记录一下precision recall的具体实现。precision recall曲线matlab一般使用的都是下面的版本&#xff1a;func…

trap

http://blog.csdn.net/elbort/article/details/8525599 http://mywiki.wooledge.org/SignalTrap转载于:https://www.cnblogs.com/flowjacky/p/4785723.html

WinSCP实现Ubuntu与 Windows 文件共享方法

2019独角兽企业重金招聘Python工程师标准>>> WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。WinSCP绿色中文版 一款基于SSH安全高效的FTP上传软件。WinSCP 可以执行所有基本的文…