静态库与动态库

静态库

编译时候放入可执行文件

生成

1
2
1. gcc -c main.cpp -o main.o
2. a.o b.o c.o => all.a

命名

1
libxxx.a

操作

1
2
ar rcs libmyhello.a hello.o
gcc -o hello main.c -static -L. -lmyhello

动态库

运行时候载入内存

命名

1
libxxxx.so.major.minor

操作

1
2
gcc -shared -fPIC -o libmyhello.so hello.o
gcc -o hello main.c -L. -lmyhello

执行时候如何定位动态库位置

1
2
LD_LIBRARY_PATH 里面记录了位置
export LD_LIBRARY_PATH=’pwd

这个目录自动包含

1
2
/lib
/usr/lib

在新安装一个库之后如何让系统能够找到他

如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。

如果安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下

  1. 编辑/etc/ld.so.conf文件,加入库文件所在目录的路径
  2. 运行ldconfig,该命令会重建/etc/ld.so.cache文件

动态库查找目录

1
2
3
4
5
它先后搜索
1.elf文件的 DT_RPATH段
2.环境变量LD_LIBRARY_PATH
3./etc/ld.so.cache文件列表
4./lib/,/usr/lib目录找到库文件后将其载入内存,但是我们生成的共享库在当前文件夹下,并没有加到上述的4个路径的任何一个中,因此,执行后会出现错误)

查看依赖

1
ldd /bin/lnlibc.so.6

http://www.cppblog.com/deane/articles/165216.html

请作者喝一杯咖啡☕️