高效完成网站建设的步骤,峨眉山移动网站建设,外贸人才网哪家最好,湘潭网站建设 搜索磐石网络一.动态库优先搜索路径顺序
之前的文章我有整理过#xff0c;这里再列出来一次
1. 编译目标代码时指定的动态库搜索路径#xff1b;
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径#xff1b;
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径#xff1b;
4. 默认…一.动态库优先搜索路径顺序
之前的文章我有整理过这里再列出来一次
1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib和/usr/lib
补充说明
/etc/ld.so.conf 文件记录了编译时使用的动态库的路径也就是加载so库的路径。/etc/ld.so.conf文件中有一句include ld.so.conf.d/*.conf它把ld.so.conf.d 文件夹下所有conf文件中路径加载到 ld.so.conf 中配置后要运行 ldconfig命令才能生效。
提示默认情况下编译器只会使用/lib和/usr/lib这两个目录下的库文件。因此若在用源码安装时未使用--prefix指定安装路径为/usr/lib就可能会报找不到相关的.so库的错误。
二.ldconfig程序
2.1ldconfig介绍
ldconfig是动态链接库的管理命令位于/sbin下其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用。在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下搜索出可共享的动态链接库格式如lib*.so*进而创建出动态装入程序(ld.so)所需的连接和缓存文件缓存文件默认为/etc/ld.so.cache此文件保存已排好序的动态链接库名字列表。
linux下的共享库机制采用了类似高速缓存机制将库信息保存在/etc/ld.so.cache程序连接的时候首先从这个文件里查找然后再到ld.so.conf的路径中查找。因此当安装完一些库文件或者修改/etc/ld.so.conf增加了库的新的搜索路径为了让动态链接库为系统所共享需要运行一下ldconfig使所有的库文件都被缓存到文件/etc/ld.so.cache中如果没做可能会找不到刚安装的库。LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径。
2.2如何让系统找到安装的动态库
1.如果安装在/lib或者/usr/lib下那么ld默认能够找到无需其他操作。
2.如果安装在其他目录需要将其添加到/etc/ld.so.cache文件中步骤如下 a. 编辑/etc/ld.so.conf文件加入库文件所在目录的路径; b. 运行ldconfig 该命令会重建/etc/ld.so.cache文件;
3.添加环境变量
三.linux程序添加动态库文件目录到环境变量的几种办法
上一节的第二小节提到了如何让系统找到安装的动态库这一节详细介绍下执行的步骤。
3.1添加环境变量
3.1.1添加当前用户当前的环境变量--临时
注意这里冒号起一个分隔作用“.”表示当前目录“/home/czd/...”表示另外一个目录。
export LD_LIBRARY_PATH/home/czd/... #.so file path
3.1.2添加当前用户的环境变量
修改~/.bashrc文件在其末尾添加环境变量。
vim ~/.bashrc
export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/czd/... #.so file path
使其生效指令
source ~/.bashrc
如不生效请重启。
3.1.3添加所有用户的环境变量
修改profile文件在其末尾添加环境变量。
vim /etc/profile
export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/czd/... #.so file path
使其生效指令
source /etc/profile
如不生效请重启。
3.2添加ldconfig寻找路径
步骤
1.编辑链接配置文件
vim /etc/ld.so.conf
2.确认内容是否如下不是则修改为如下保存并退出
include /etc/ld.so.conf.d/*.conf
3.进入目录内创建*.conf文件文件名随意扩展名必须为.conf
cd /etc/ld.so.conf.d/
vim libmy.conf
4.在文件内部添加so的路径保存并退出
/home/czd/XXXX/XXXX
5.执行命令使其生效
sudo ldconfig
程序在运行时寻找so库就会添加到目录中寻找。
3.3赋值so文件到lib路径
linux系统的so库一般存储在“lib”“/usr/lib/”路径中可将动态库复制到该路径中。
sudo cp libtest.so /usr/lib/
四.查看可执行文件依赖的库
ldd
dd 列出动态依赖显示一个程序运行时所需要的共享库。
ldd 会解析出每个库引用使用的搜索方式与动态链接器一样并以下面的形式显示结果
library-name resolves-to-path
对于多数的 ELF 文件ldd 至少会列出与 ld-linux.so.2、动态链接器以及标准 C 库 lib.so.6 相关的条目。
提示对于使用了交叉编译工具的可执行文件不能用宿主环境的ldd命令查看其依赖的库文件可以使用readelf命令查看或者在其相应的环境使用ldd命令查看。
nm
nm 命令会列出目标库或可执行文件中定义的一组符号常用来寻找哪些库定义了一个符号。