Linux_编译和动态库链接
报错
error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory
有没有库,find
查到查不到库,共享库路径没有指定
变量
PATH 保存可执行文件程序路径,
LIBRARY_PATH 是在程序编译期间查找动态链接库时指定的查找共享库的路径
LD_LIBRARY_PATH 环境变量主要是用于指定动态链接器(ld)查找ELF可执行文件运行时所依赖的动态库(so)的路径,
其内容是以冒号分隔的路径列表 标准库路径/lib和/usr/lib中继续搜索
有当程序所需的依赖库不是系统标准安装的库或对库的版本特定要求时,可以指定 LD_LIBRARY_PATH环境变量实现。
LIBRARY_PATH 和LD_LIBRARY_PATH 共同点都是库的路径,而PATH是可执行文件的路径
LIBRARY_PATH 和 LD_LIBRARY_PAT H参数说明
LIBRARY_PATH is used by gcc before compilation 编译前
LD_LIBRARY_PATH 编译后链接
GCC编译、链接生成可执行文件时,动态库的搜索路径就包含LIBRARY_PATH
链接生成二进制可执行文件后,运行该程序加载动态库文件时就会搜索包含LD_LIBRARY_PATH路径下的动态库
命令
ldd 命令
ldd 实际上并不加载共享库到内存中,它只是模拟了这一过程,因此不会改变系统的运行环境。
此外,由于 ldd 依赖于动态链接器,它可能无法正确报告那些在运行时通过其他机制(如运行时链接器或其他程序)加载的共享库
查看可执行文件或库文件本身对所依赖的库的情况 ldd ~/myprogram
ldd(英文全拼:list dynamic dependencies)命令列出程序或库文件的动态依赖关系(所依赖的共享库列表
ldd是个脚本 质是通过 ld-linux.so(elf 动态库的装载器)来实现
type ldd
file /usr/bin/ldd
第1列:程序需要依赖什么库
第2列:系统提供的与程序需要的库所对应的库
第3列:库加载的开始地址
ld 命令
动态库搜索路径可以通过 ld --verbose
ldconfig命令
ldconfig是一个动态链接库管理命令,命令的用途,
主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,
搜索出可共享的动态链接库(格式如前介绍,lib*.so*),
进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,
1.往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf文件的,
但是添加完后需要调用下ldconfig,不然添加的library会找不到。
2、如果添加的library不在/lib和/usr/lib里面的话,就需要修改/etc/ld.so.conf文件,往该文件追加library所在的路径,
然后也需要重新调用下ldconfig命令。或者在/etc/ld.so.conf.d/下添加*.conf的文件并追加library的路径,
然后执行ldconfig。比如在安装MySQL的时候,其库文件/usr/local/mysql/lib
ln 命令
3.ln [源文件/目录] [目标软链接]
ln -s
分类:
Linux_数据结构与算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具