动态库静态库的生成
函数库:
1、便于移植,方便使用
2、保密, 保护知识产权
静态库:编译生成静态库
编译生成静态库:
1、把.c
文件编译生成.o
文件
gcc -c add.c 或gcc add.c -c -o add.c
2、把.o
文件编译生成.a
静态库
ar -rc libadd.a add.o
3、静态库的使用
gcc main.c libadd.a -o project
gcc main.c -o project libadd.a
gcc main.c -o project -I./include -L./lib -ladd
4、执行文件
./project
动态库:编译生成动态库
1、把.c文件编译生成.o动态库
gcc -fgic -shared add.c -o libadd.so
2、动态库的使用:
> `gcc main.c -o project libadd.so
>
> gcc main.c -o project -I./include -L./lib -ladd`
> (-I./include 表示连接头文件,-L./lib 表示连接动态库,-ladd表示去掉动态库文件前缀lib和后缀.so)
3、执行二进制文件时:
./project
如果出现以下错误:
./main: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory
解决方法:
(0)编译过程中指定动态库路径
gcc demo.c libsum/sum.c -o demo -I./libmax -L./libmax -lmax -Wl,-rpath=./libmax
如果需要指定多个路径,使用冒号 : 作为分隔符
gcc demo.c -o demo -Wall -I./libmax -L./libmax -lmax -I./libsum -L./libsum -lsum -Wl,-rpath=./libmax/:./libsum/
(1)永久设置需要把add.so拷贝到/lib(注意:这种方法不推荐,会污染到原来系统自带的动态库环境)
cp libadd.so /lib
(2)临时设置环境变量LD_LIBRARY_PATH:
期嵌入式直播10班/02Linux基础/02/code/test_动态库
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/GZ2019期嵌入式直播10班/02Linux基础/02/code/test_动态库
(3) 永久设置:
把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/GZ2019期嵌入式直播10班/02Linux基础/02/code/test_动态库
加入到配置文件 ~/.bashrc
注意
:LD_LIBRARY_PATH告诉编译器去哪个路径下找动态库