0. 文件清单
add.c
#include <stdio.h>
int add()
{
printf("add init\n");
return 0;
}
add.h
int add();
main.c
#include <stdio.h>
int mian()
{
add();
return 0;
}
1. 生成 add.o
gcc -c add.c -fPIC
2. 生成共享库 libadd.so
gcc -o libadd.so add.o -shared
3. 编译主程序 app
gcc main.c -o app -L . -ladd
注:此时运行app会报错,原因是程序运行load动态函数库时,找不到该函数库
./app: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory
4. 解决方法
a. 将libadd.so放到/usr/lib目录下,执行cp libadd.so /usr/lib
,然后运行./app
,程序运行正常,问题得到解决
b. 使用环境变量LD_LIBRARY_PATH
,程序运行load动态函数库时,会先在LD_LIBRARY_PATH指定的目录下查找函数库,找不到就再去/usr/lib下查找,执行export LD_LIBRARY_PATH=/home/zzk/demo/workspace/
,然后运行./app,程序运行正常,问题得到解决。