编译自己的动态库 *.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!