c 编译动态库

来源:互联网 发布:有杆泵优化实用工具 编辑:程序博客网 时间:2024/05/21 10:31

编译自己的动态库 *.so

1.动态库源文件

vi  a.c   

#include <stdio.h>

void a(char *s)

{

printf("%s\n",s);

}

gcc -shared -fPIC a.c -o liba.so  生成 liba.so 动态库文件

其中 -shared 参数指定生成动态库

-fPIC 表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,不能达到真正代码段共享的目的。

2.调用动态库的程序

vi b.c

int main()

{

a("hello world!");

}

gcc b.c -L./ -wl,-rpath=./ -la     生成可执行文件a.out,其中调用了动态库liba.so中的a函数。

其中  -L./  表示链接器在链接时在当前目录找需要的函数库。

-wl,-rpath=./    -wl表示向链接器传进参数,参数为-rpath=./ 表示运行时从当前目录找需要链接的函数库。当指定多个路径时,用"  :“相隔。

还可以通过修改 LD_LIBRARY_PATH来完成,例如   export  LD_LIBRARY_PATH=LD_LIBRARY_PATH:./         //即原路径加上当前目录

-la 表示要链接的函数库为liba.so 

./a.out  运行结果为 hello world!

0 0