1.1静态库
1.1.1创建使用流程
1、创建库文件(.c文件)
//该文件为需要封装的功能(sum.c)
int sum (int a,int b){
return a+b;
}
2、编译创建的库文件(.c文件编译为,o文件)
gcc -c sum.c -o sum.o
3、将编译后的库文件生成静态库(.c文件编译为,o文件)
ar crs libmysum.a sum.o
//固定格式:ar crs lib+[name].a [name].o【即为步骤2中生成的.o文件】
4、编写主函数文件(.c文件)
//用于调用(test.c)
#include <stdio.h>
int main(int argc,char*argv[]){
printf("sum= %d \n",sum(3,4));
return 0;
}
5、进行编译调用
gcc test.c -o test -L. -lmysum
gcc 主函数 -o 想生成的文件名 -L.(当前文件用.) -l 静态库的文件
1.2动态库(共享库)
1、创建库文件(.c文件)
//该文件为需要封装的功能(sum.c)
int sum (int a,int b){
return a+b;
}
2、编译创建的库文件(.c文件编译为,o文件)
gcc -fPIC -c sum.c -o sum.o
3、生成动态库
gcc -shared -o libmysum.so sum.o
4、编写主函数文件(.c文件)
//用于调用(test.c)
#include <stdio.h>
int main(int argc,char*argv[]){
printf("sum= %d \n",sum(3,4));
return 0;
}
5、进行编译调用
gcc test.c -o test -L. lmysumadd
6、bug修正
当运行时却发现代码报错:
root@ubuntu:/mnt/hgfs/about_c/vimshares/IO/library/win# ./test
./test: error while loading shared libraries: libmysum.so: cannot open shared object file: No such file or directory
原因:默认执行的是在
/lib
或者/usr/lib
中去检索文件mysumadd
-
解决方案1:
将
mysumadd
拷贝或者移动到对应的/lib
或者/usr/lib
目录中去root@ubuntu:/mnt/hgfs/about_c/vimshares/IO/library/win# mv ./libmysum.so /lib root@ubuntu:/mnt/hgfs/about_c/vimshares/IO/library/win# ./test sum= 7
-
解决方案2:
把
LD_LIBRARY_PATH
环境变量中加上库所在的路径export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
当终端关闭后,这个环境变量自动销毁
-
解决方案3:
添加
/etc/ld.so.conf.d/*.conf
文件,把库所在的路径加到文件末尾,执行ldconfig
刷新,即可