linux下编写和调用一个简单的动态库大概分为以下几个步骤:
- 创建动态库程序文件
add.c
int add(int a,int b)
{
return a+b;
}
#ifndef _HEAD_
#define _HEAD_
int add(int a,int b);
#endif
gcc -fpic -c add.c
gcc -shared –o libhead.so add.o
#include <stdio.h>
#include "head.h"
int main(void)
{
printf("3+5 sum = %d \n",add(3,5));
return 0;
}
gcc -o main main.c -L ./ -lhead
-L指定动态链接库的路劲,-ldXX链接库函数XX。-lXX是动态库的调用规则。Linux系统下的动态库命名方式是lib*.so,而在链接时表示位-l*,*是自己命名的库名。
error while loading shared libraries: libhead.so: cannot open shared object file: No such file or directory
这是因为程序运行时没有找到动态链接库的原因,注意linux不会自动在当前目录查找动态库文件。解决方案一般有三种,借鉴博客园SmartVessel原文:
ln -s /home/用户名/code/lib/*.so /usr/lib
sudo ldconfig
注意填写你的动态库所在目录的路径,若不知道可以用pwd查看全路径。如果路径不对,可能会报错:
cannot open shared object file: Error 40
2.修改LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/用户名/code/lib/:$LD_LIBRARY_PATH
sudo ldconfig
3.修改/etc/ld.so.conf,然后刷新
vim /etc/ld.so.conf
add /home/用户名/code/lib/
sudo ldconfig
必须记得更新sudo ldconfig,否则还是会报错。
./main
3+5 sum = 8
好啦,测试成功,有问题可以留言讨论!
版权声明:本文为博主applebite原创文章,转载请注明出处。
原文地址:http://blog.csdn.net/applebite/article/details/47011221