在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址不无关代码(Position Independent Code (PIC))。
对gcc编译器,只需添加上 -fPIC 标签,如: gcc -fPIC -c file1.c gcc -fPIC -c file2.c gcc -shared libxxx.so file1.o file2.o
注意到最后一行,-shared 标签告诉编译器这是要建立动态链接库。这与静态链接库的建立很不一样,后者用的是 ar 命令。
也注意到,动态链接库的名字形式为 “libxxx.so” 后缀名为 “.so” .
五、静态库的创建和使用:
1、生成静态库 :库名 libmylib.a ar rcs libmylib.a mylib.o
2、将静态库copy到 /usr/lib/ 或/lib/ 目录下 cp libmylib.a /usr/lib/
3、静态库的使用 比如测试文件为test.c gcc -0 test test.c -lmylib -l为选项, mylib为库名。
mylib为libmylib的中间部分,Linux下约定所有库都以前缀lib开始 静态库以.a结尾,动态库以.so结尾。
再编译程序时,无需带上前缀和后缀。
注意:静态库的命名需要以"lib"开头,否者连接是编译器无法找到库
----------------------------comments: .a是静态lib。所以需要rebuild AMMSPServ这个binary。
----------------------------而动态链接库.so 可以,只rebuild so文件,重启binary的时候会自动加上新的so.
-----------------------------这些coredump主要还是看到那些相关的文件,结合各种log的信息,缩小问题范围。在重点的地方or stack的所有地方加上private log
对gcc编译器,只需添加上 -fPIC 标签,如: gcc -fPIC -c file1.c gcc -fPIC -c file2.c gcc -shared libxxx.so file1.o file2.o
注意到最后一行,-shared 标签告诉编译器这是要建立动态链接库。这与静态链接库的建立很不一样,后者用的是 ar 命令。
也注意到,动态链接库的名字形式为 “libxxx.so” 后缀名为 “.so” .
五、静态库的创建和使用:
1、生成静态库 :库名 libmylib.a ar rcs libmylib.a mylib.o
2、将静态库copy到 /usr/lib/ 或/lib/ 目录下 cp libmylib.a /usr/lib/
3、静态库的使用 比如测试文件为test.c gcc -0 test test.c -lmylib -l为选项, mylib为库名。
mylib为libmylib的中间部分,Linux下约定所有库都以前缀lib开始 静态库以.a结尾,动态库以.so结尾。
再编译程序时,无需带上前缀和后缀。
注意:静态库的命名需要以"lib"开头,否者连接是编译器无法找到库
----------------------------comments: .a是静态lib。所以需要rebuild AMMSPServ这个binary。
----------------------------而动态链接库.so 可以,只rebuild so文件,重启binary的时候会自动加上新的so.
-----------------------------这些coredump主要还是看到那些相关的文件,结合各种log的信息,缩小问题范围。在重点的地方or stack的所有地方加上private log