MAC制作dylib文件详细步骤

废话少说,直接上干货:

首先在/usr/zdd/desktop/创建一个a.c文件,打开终端cd /usr/zdd/desktop/

直接上命令gcc -c a.c -o a.o 编译成a.o文件。

(如果是JAVA项目或者Android JNI项目中防止会有报jni.h not found和jni_md.h not found错误,解决办法是:

gcc -I /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include -I /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/include/darwin -c a.c -o a.o



此时,.o文件已生成。最后一步gcc a.o -dynamiclib -o liba.dylib 即大功告成。

(注:多个c文件,需要分别生成.o文件 通过 gcc a.o b.o c.o d.o -dynamiclib -o lib.dylib)


附:GCC常用命令解析

我们以Hello world程序来开始我们的学习。代码如下:


/* hello.c */

#include <stdio.h>

int main(void)

{

printf ("Hello world!\n");

return 0;

}


1. 执行如下命令:$ gcc -o hello hello.c

运行如下 : $ ./hello

输出: Hello,world!

2. 我们也可以分步编译如下:

(1) $ gcc –E hello.c -o hello.i 

//预处理结束

//这时候你看一下hello.i ,可以看到插进去了很多东西。

(2) $ gcc –S hello.i

//生成汇编代码后结束

(3) $ gcc –c hello.c

或者:

$ gcc -c hello.c –o hello.o

或者:

$ gcc -c hello.i -o hello.o

//编译结束

//生成 hello.o文件

(4) $ gcc hello.o –o hello.o

或者:

$ gcc –o hello hello.c

//链接完毕,生成可执行代码


3. 我们可以把几个文件一同编译生成同一个可执行文件。

比如:一个工程有main.c foo.c def.c生成foo的可执行文件。

编译命令如下:

$ gcc –c main.c foo.c def.c –o foo

或者:

$ gcc –o foo main.c foo.c def.c

三.库依赖

函数库是一些头文件(.h)和库文件(.so或者.a)的集合。Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下,但并非绝对如此。因此GCC设有添加头文件和库文件的编译选项开关。

1. 添加头文件:-I

例如在/home/work/include/目录下有编译foo.c所需头文件def.h,为了让GCC能找到它们,就需要使用-I选项:

$ gcc foo.c -I /home/work/include/def.h -o foo

2. 添加库文件:-L

例如在/home/work/lib/目录下有链接所需库文件libdef.so,为了让GCC能找到它们,就需要使用-L选项:

$ gcc foo.c –L /home/work/lib –ldef.a –o foo

说明:-l选项指示GCC去连接库文件libdef.so。Linux下的库文件命名有一个约定,即库文件以lib三个字母开头,因为所有的库文件都遵循这个约定,故在用-l选项指定链接的库文件名时可以省去lib三个字母。

[题外语] 

Linux下的库文件分为动态链接库(.so文件)和静态链接库(.a文件)。GCC默认为动态库优先,若想在动态库和静态库同时存在的时候链接静态库需要指明为-static选项。比如上例中如还有一个libdef.a而你想链接libdef.a时候命令如下:

$ gcc foo.c –L /home/work/lib –static –ldef.a –o foo


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值