C 静态库和动态库
2016-08-10 本文已影响37人
悟剑声
存在文件
- a.c b.c all.h main.c
静态库
linux以.a为后缀,win下lib为后缀
-
生成a.o b.o
gcc -c a.c b.c
-
生成静态库testa,命名方式为lib开头,“.a”结尾
ar crs libtesta.a a.o b.o
-
生成a.out
gcc main.c -L. -ltesta
动态库
linux以.so为后缀,win下以.dll为后缀
-
生成a.o b.o,位置无关的代码(Position Idpendent Code, PIC)
gcc -c -fPIC a.c b.c
-
生成静态库testb
gcc -shared -o libtestb.so a.o b.o
-
生成a.out
gcc main.c -L. -ltestb
-
直接运行时,可能找不到链接库
cannot open shared object file: No such file or directory,解决办法有下面几种
<ol>
<li>添加变量LD_LIBRARY_PATH来指定首先搜索库的路径
export LD_LIBRARY_PATH=动态库的所在路径
打印变量使用echo,删除变量使用unset
</li>
<li>用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
ln -s 动态库名 /usr/lib
</li>
<li>修改/etc/ld.so.conf,然后刷新
vim /etc/ld.so.conf
add 动态库路径
sudo ldconfig
</li>
</ol>