美文网首页
Mac OS X 构建 dylib

Mac OS X 构建 dylib

作者: blue_lights | 来源:发表于2021-01-09 09:15 被阅读0次

一、编写   sourceFile    XXX.c

1、A.c 

2、 B.c

3、Main.c

二、Build  dylib

2.1  生成动态库: gcc -dynamiclib A.c -o libA.dylib

-dynamiclib 表示将A.c  B.c编译成一个动态库

-o libA.dylib 用于指定生成的动态库的名称

2.2 编译可执行文件  gcc Main.c -L. -lA -lB -o main

 -L. 指定当前目录为链接时动态库的查找目录

-lA 指定要链接的动态库为libA.dylib

-lB 指定要链接的动态库为libB.dylib

-o main 指定生成的可执行文件名称为main

直接点击运行可执行文件时出现dyld: Library not loaded:  

2.3、运行可执行文件 ./main 

在当前目录下执行main,注意要加上 ./

三、otool 

3.1、install_name

(Note:只有动态库才有install_name,应用程序如果引用了某一个动态库,则会在链接时记录该动态库的install_name)

每个动态库(dylib)都有一个install_name,可以认为是动态库初次安装时的默认路径,这个install_name保存在dylib文件中。 

3.2 、show all dylib

otool -L main

3.3、 show the id of dylib  


查看dylib的install_name

 otool -D <dylib>

3.4、 change the id of dylib

install_name_tool -id <new name> <dylib>

更新 install_name_tool of libA.dylib 到 ../libA.dylib

Example: install_name_tool -id ../libA.dylib libA.dylib

3.5 、Change the path where executable find the dylib

install_name_tool -change <old value> <new value> <executable>

Example: install_name_tool -change libA.dylib ../libA.dylib main

注意:还有一个方法,如果dylib的install_name不正确,将环境变量$DYLD_LIBRARY_PATH设置为dylib所在的路径可以让可执行文件成功找到dylib.

四、dylib 引用

4.1、链接是引用

1、 编译:gcc Main.c -L. -lA -lB -o main

2、执行:./main

3、动态库移动到上一级目录:mv libA.dylib ..

4、编译失败:gcc Main.c -L. -lA -lB -o main

5、动态库移动回当前目录:mv ../libA.dylib .

6、再次编译成功:gcc Main.c -L. -lA -lB -o main

7、再执行:./main 

在执行上述链接过程时,编译器顺便将动态库libA.dylib、libB.dylib 的install_name记录到了main程序中,用来在运行时查找并引用该动态库。

4.2、运行时引用

后续

相关文章

网友评论

      本文标题:Mac OS X 构建 dylib

      本文链接:https://www.haomeiwen.com/subject/triduttx.html