error while loading shared libraries: so: cannot open shared object file: No such file or directory

本文介绍如何使用LD_DEBUG=libs命令定位并解决tmux因缺少libevent-2.1.so.6文件而无法运行的问题,通过创建软链接使系统能够正确加载所需的共享库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用LD_DEBUG=libs解决找不到文件的问题,通常情况都是在系统路径下没有对应的文件,那么这个命令就能够发现缺少的文件,并且能看到查找的路径


[root@localhost tmux-2.6]# tmux -V

tmux: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory

[root@localhost tmux-2.6]# LD_DEBUG=libs tmux -V | grep libevent
     54283:     find library=libutil.so.1 [0]; searching
     54283:      search cache=/etc/ld.so.cache
     54283:       trying file=/lib64/libutil.so.1
     54283:
     54283:     find library=libevent-2.1.so.6 [0]; searching
     54283:      search cache=/etc/ld.so.cache
     54283:      search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64                (system search path)
     54283:       trying file=/lib64/tls/x86_64/libevent-2.1.so.6
     54283:       trying file=/lib64/tls/libevent-2.1.so.6
     54283:       trying file=/lib64/x86_64/libevent-2.1.so.6
     54283:       trying file=/lib64/libevent-2.1.so.6
     54283:       trying file=/usr/lib64/tls/x86_64/libevent-2.1.so.6
     54283:       trying file=/usr/lib64/tls/libevent-2.1.so.6
     54283:       trying file=/usr/lib64/x86_64/libevent-2.1.so.6
     54283:       trying file=/usr/lib64/libevent-2.1.so.6
     54283:

tmux: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory

找到缺少的文件位置

[root@localhost tmux-2.6]# ll /usr/local/tmux/lib/libevent-2.1.so.6

lrwxrwxrwx. 1 root root 21 Mar 16 00:05 /usr/local/tmux/lib/libevent-2.1.so.6 -> libevent-2.1.so.6.0.2

做个软连接到系统路径下

[root@localhost tmux-2.6]# ln -s /usr/local/tmux/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

这样就能找到缺少的文件了:

[root@localhost tmux-2.6]# tmux -V
tmux 2.6

### Qt 打包时找不到共享库文件解决方案 当遇到 `error while loading shared libraries: .so: cannot open shared object file: No such file or directory` 错误时,这通常意味着运行程序所需的动态链接库未被找到。对于Qt项目,在打包过程中确保所有依赖项都正确配置至关重要。 #### 方法一:修改环境变量 LD_LIBRARY_PATH 临时设置或扩展LD_LIBRARY_PATH可以使得特定路径下的共享库能够被加载器识别到。通过命令行添加新的库路径至现有环境中: ```bash export LD_LIBRARY_PATH=/path/to/your/libs:$LD_LIBRARY_PATH ``` 这种方法适用于测试阶段快速验证问题所在,但在生产环境下不推荐长期使用这种方式来解决问题[^1]。 #### 方法二:更新系统级库查找缓存 如果已知缺少的`.so` 文件位于标准位置之外,则可以通过编辑 `/etc/ld.so.conf.d/` 下的一个新文件(如qt_libs.conf),将自定义库的位置加入其中,并执行刷新操作使更改生效: ```bash sudo echo "/opt/qt/lib" | sudo tee /etc/ld.so.conf.d/qt_libs.conf sudo ldconfig ``` 此方法会永久性地让系统的动态连接器知道去哪里寻找这些额外的库文件[^5]。 #### 方法三:静态编译应用程序 为了避免部署时因缺失外部依赖而产生的麻烦,可以选择以静态方式构建整个应用及其所需的所有第三方组件。虽然这样做会使最终可执行文件体积增大,但却能有效减少由于不同机器上安装软件差异带来的兼容性难题。 为了实现这一点,需调整CMakeLists.txt 或 qmake.pro 中的相关选项,指定要静态链接的目标库版本。注意并非所有的库都支持完全静态化处理[^2]。 #### 方法四:创建独立的应用分发包 利用工具如Linux Deploy、AppImageKit 创建包含所有必要资源在内的便携式应用程序镜像。这类封装技术允许开发者把应用程序连同它所依赖的一切一起打包成单个文件形式发布给用户下载安装,从而绕过了传统意义上的依赖管理困扰[^3]。 以上几种策略可以根据实际情况灵活选用一种或多组合并实施,具体取决于项目的复杂度以及目标平台的特点等因素考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值