===================================
file1.c
#include
int test()
{
printf("in file file1.c\n");
return 0;
}
===================================
file1.h
int test();
===================================
用以上两个文件生成.so
gcc file1.c -fPIC -shared -o libfile1.so
如果要将多个*.o文件编译成库的时候,可以用如下
gcc -c filex.c -o filex.o (一般文件)
gcc -c -fPIC file1.c -o file1.o
gcc -shared filex.o file1.o -o libfile1.so
生成so后,可以使用ldd命令,测试是否动态链接,如果正常显示链接,说明ok,如果提示not found则有问题。编译测试文件test。
#include
#include "file1.h"
int main()
{
test();
return 0;
}
ldd test
===================================
file2.c
#include
#include "file1.h" //用到库的头文件需指定
int main()
{
test();
return 0;
}
===================================
测试程序动态使用库中的函数test()
gcc file2.c -L. -lfile1 -o file2
===================================
在2个地方需要用到so
1. 在编译需要用到库内容,需要指定库的路径
在编译的时候可以通过-L -l(小L)
-L. 在编译的时候要链接的so的路径,'.'为当前目录
-l, 执行库的名字,有隐含规则。如libudev.so,写为-ludev
2. 执行用到库内容的可执行文件的时候,可执行文件需要能访问到链接库
(1)这种方式最简单,将*.so放入/lib
(2)修改LD_LIBRARY_PATH
(3)修改/etc/ld.so.conf
阅读(3446) | 评论(0) | 转发(0) |