linux下的动态库

也就是windows下的.dll

1.命名

2.制作

(1)生成与位置无关的.o文件

gcc -fPIC -c *.c -I ../include  

(2)将.o打包成动态库(或者叫共享库)

gcc -shared -o libmytest.so *.o -I ../include

3.发布和使用

(1)gcc main.c lib/libmytest.so -o app -I include

(2)gcc main.c -L ./lib -l mytest -o app

4.如何解决动态库无法加载得问题

ldd //查看可执行程序依赖所有得库

echo $PATH

--解决1:把该动态库放入总目录下得lib下(不建议这样做,万一与os相关得某个动态库重名就尴尬了)

--解决2:把该库制定该LD_LIBRARY_PATH这个环境变量(临时用)

echo $LD_LIBRARY_PATH

赋值:export LD_LIBRARY_PATH=./lib

--解决3:打开家目录下得.bashrc

G   //光标移动到最后一行

加上export LD_LIBRARY_PATH=/home/itcast/3day/lib           //动态库得绝对路径

关掉终端,然后才会生效

--解决4:

(1):需要找到动态链接器得配置文件

cd /etc

ls

ls -l ld.so.conf

sudo vi ld.so.conf

(2):动态库的路径写到配置文件中

然后加上动态库的绝对路径

(3)更新:sudo  ldconfig -v

5.优缺点

只有在程序执行的时候才会调用动态库

优点:执行程序体积小,动态库更新了不用重新编译程序

缺点:需要把动态库提供给用户,加载速度慢

posted @ 2019-01-04 23:26  代码拯救世界可以吗  阅读(145)  评论(0编辑  收藏  举报