gcc制作静态库和动态库总结

来源:互联网 发布:淘宝怎么买m9大型折刀 编辑:程序博客网 时间:2024/06/04 18:40

Linux下制作静态库和动态库

目录结构:
这里写图片描述

文件内容:

//main.c#include<stdio.h>#include"../include/add.h"int main(){    printf("%d",add(1,2));}//____________________________________________//add.c#include"../include/add.h"int add( int a, int  b){    return a+b;   }//______________________________________________//add.hint add( int a, int  b)

动态库制作(.so)

gcc -shared -fPIC -o lib/libadd.so src/add.c

或者

gcc -fPIC -c src/add.c    gcc -shared -o libadd.so  add.o 

使用共享库

gcc src/main.c -Llib -ladd -o main                                                                                    

运行报错:

./main: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory

解决方案总结
1、加-Wl和rpath

 gcc src/main.c -Llib -ladd -o main -Wl,-rpath=lib 

2、修改LD_LIBRARY_PATH

export LD_LIBRARY_PATH=~/test/lib:$LD_LIBRARY_PATH

3、使用ldconfig

//把库放到标准路径cp ~/test/lib/libadd.so /usr/libchmod 0775 /usr/lib/libadd.so//更新缓存ldconfiggcc src/main.c -Llib -ladd -o main       

-fPIC:编译动态库必须,输出不依赖位置的代码
-shared:编译动态库必须选项
-WI:向Linker传入一些参数

静态库制作

gcc -c src/add.c -o add.o           //制作obj文件ar -crv lib/libadd.a add.o          //制作归档文件gcc src/main.c -Llib -ladd -o main  //加上L(指明链接目录) l(指明链接库名)
2 0