兄弟 篇: Linux中静态库的制作 和 使用
动态库的工作原理是:程序启动之后,动态库会被加载到内存中供程序使用。 动态库的代码不会被打包到可执行程序中。
一、命名规则
在Linux中:
libxxx.so
lib: 前缀 ,是固定的
xxx: 库的名字,自己起名
.so: 后缀,是固定的
在windows中:
libxxx.dll
二、动态库的制作
2.1 动态库的制作流程,如图:
2.2 分两个步骤:
1.获取目标文件,使用 gcc -c 生成 .o 文件 ,得到 和位置无关的代码
gcc -c -fpic/-fPIC a.c b.c
2.使用 gcc -shared 指令 获得动态库
gcc -shared a.o b.o -o libcalc.so
三、动态库的使用
1.可执行程序, 可以通过 ldd [file] 命令 检查动态库依赖项
比如,查看可执行程序 main 的动态库依赖项:
2.对于elf格式的可执行程序,是由 ld-linux.so 来完成的,它先后搜索 elf 文件的 DT_RPATH段 ,环境变量LD_LIBRARY_PATH ,/etc/profile 文件列表 , /etc/ld.so.conf文件列表 , /lib/, /usr/lib目录 找到库文件后将其载入内存.
如下介绍,常用 环境变量LD_LIBRARY_PATH ,/etc/profile 文件列表 , /etc/ld.so.conf文件列表 三种方式 更改环境变量,添加 动态链接库的绝对路径。
DT_RPATH段 修改不了 ;
LD_LIBRARY_PATH 环境变量是临时,更改方法:
/etc/profile 文件列表 环境变量更改:
/etc/ld.so.conf文件列表 环境变量更改:
/lib/, /usr/lib目录 因为这两个目录含有很多文件,如果将动态库文件 拷贝过来,容易产生重名覆盖,会出现错误。所以, 不把 动态链接库 拷贝到 这两个目录。
四、静态库 和 动态库 的对比
静态库:
动态库:
【Linux高并发服务器开发】 坚持的 第 3 天 ,加油 !!