解决程序开发过程中的 cannot open shared object file 问题
解决程序开发过程中的 cannot open shared object file 问题
问题描述
在 Linux 环境下的 C 程序开发过程中,引入了自己编译的动态链接库,编译正常,但是在运行程序时遇到了如下错误:
./TelemDecoder.out: error while loading shared libraries: libiLog3.so: cannot open shared object file: No such file or directory
问题分析
我自行编译了 C 语言日志库 iLog3,将编译所得动态链接库 libiLog3.so
拷贝到了 /usr/local/lib/
目录中。
通过 ls -al
命令查看 libiLog3.so
的权限如下:
程序开发环境中也已设置了相应的库依赖:
经过排查,程序对动态链接库的引用设置正常,动态链接库所处目录和文件访问权限也正常。根据经验判断,猜测该问题的根源是系统对程序库的搜索目录设置出了问题。
问题解决
首先,通过 echo $LD_LIBRARY_PATH
命令查看当前用户的 LD_LIBRARY_PATH
系统变量:
可以看到当前用户的 LD_LIBRARY_PATH
系统变量为空。所以现在对该系统变量进行设置:
export LD_LIBRARY_PATH=/usr/local/lib$:$LD_LIBRARY_PATH
source ~/.bashrc
再执行 echo $LD_LIBRARY_PATH
命令,可以看到当前用户的 LD_LIBRARY_PATH
系统变量已经被正确设置,然而程序运行时的 cannot open shared object file
问题依然存在:
继续分析:通过 ldd
命令查看程序所依赖的程序库的加载情况:
可以看到,其它的程序库都能够正确加载,唯独 libiLog3.so
的加载情况是:libiLog3.so => not found
好,现在我们执行关键的一步:通过 ldconfig
命令来建立程序库必要的链接。
ldconfig
命令的作用是:对配置文件 /etc/ld.so.conf
中定义的路径下的程序库重新建立必要的链接。其详细作用与用法参考官方文档:https://linux.die.net/man/8/ldconfig
执行 ldconfig
命令之后,程序运行的 cannot open shared object file
问题被解决。见以下截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用