1. 编写动态链接库的.c和.h源文件
新建test1
文件夹,在该文件夹下新建add.c
文件,源码如下:
int add (int a, int b)
{
return a+b;
}
新建add.h
文件,源码如下:
int add (int a, int b);
文件列表如下:
luo@luo-desktop:~/test1$ ls
add.c add.h
2. 生成动态链接库文件
执行以下命令生成libadd.so
文件:
luo@luo-desktop:~/test1$ gcc add.c -fPIC -shared -o libadd.so
luo@luo-desktop:~/test1$ ls
add.c add.h libadd.so
3. 编写测试代码调用.so文件
新建main.c
文件,源码如下:
#include "stdio.h"
#include "add.h"
int main (void)
{
int result = add(1, 2);
printf("hello world %d \n", result);
return 0;
}
文件列表如下:
luo@luo-desktop:~/test1$ ls
add.c add.h libadd.so main.c
执行以下命令调用libadd.so
文件生成可执行文件:
luo@luo-desktop:~/test1$ gcc main.c -L. -ladd -o main
luo@luo-desktop:~/test1$ ls
add.c add.h libadd.so main main.c
luo@luo-desktop:~/test1$ ./main
./main: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory
运行main
时报错说找不到libadd.so
,所以需要把libadd.so
文件的路径加入到环境变量LD_LIBRARY_PATH
中,或者修改/etc/ld.so.conf
文件,这里演示第一种方法,执行以下命令:
luo@luo-desktop:~/test1$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
luo@luo-desktop:~/test1$ ./main
hello world 3
测试成功。