Program是Xenomai测试套件的一部分,从Linux PC交叉编译为Linux Xenomai ARM工具链 .
# echo $LD_LIBRARY_PATH
/lib
# ls /lib
ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so
ld-linux.so.2 libdl.so.2 libpthread.so.0
libc-2.3.3.so libgcc_s.so libpthread_rt.so
libc.so.6 libgcc_s.so.1 libstdc++.so.6
libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9
libcrypt.so.1 libm.so.6
# ./clocktest
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory
Edit: 好的我没注意到.1末尾是文件名的一部分 . 这究竟是什么意思?
17 回答
Update
虽然我在下面写的内容是关于共享库的一般答案,但我认为这些消息的最常见原因是因为您安装了一个软件包,但没有安装该软件包的"-dev"版本 .
嗯,这不是说谎 - 在那个清单中没有
libpthread_rt.so.1
. 您可能需要重新配置并重新构建它,以便它取决于您拥有的库,或安装提供libpthread_rt.so.1
的任何内容 .通常,.so之后的数字是版本号,并且你有一个真正的文件libfoo.so.1.0,以及指向libfoo.so.1.0的符号链接foo.so和foo.so.1 . 如果您在不删除另一个版本的情况下安装版本1.1,则需要注意它是1.0还是1.1将指定libfoo.so.1 . 正如orip在评论中指出的那样,这在http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html得到了很好的解释 .
在您的情况下,您可能会将
libpthread_rt.so.1
符号链接到libpthread_rt.so
. 但不保证它不会破坏你的代码并吃掉你的电视晚餐 .您的库是一个动态库 . 您需要告诉操作系统它可以在运行时找到它 .
为此,我们需要执行以下简单步骤:
(1)如果您不知道图书馆,请查找图书馆的位置 .
(2)检查是否存在动态库路径环境变量(
LD_LIBRARY_PATH
)如果没有要显示的内容,请添加默认路径值(如果您愿意,则添加)
(3)我们添加欲望路径,导出它并尝试应用程序 .
请注意,路径应该是
path.so.something
所在的目录 . 所以,如果path.so.something
在/my_library/path.so.something
中,它应该是:来源:http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html
您可以尝试以下几种解决方案:
ldconfig
正如AbiusX所指出的:如果你刚刚安装了库,你可能只需要运行ldconfig .
通常,您的软件包管理器会在您安装新库时处理此问题,但并非总是如此,即使这不是您的问题,运行ldconfig也不会受到影响 .
开发包或错误的版本
如果这不起作用,我也会查看Paul's suggestion并查找该库的"-dev"版本 . 许多库分为开发和非开发包 . 您可以使用此命令查找它:
如果您只安装了错误的库版本,这也会有所帮助 . 有些库同时以不同版本发布,例如Python .
图书馆位置
如果您确定安装了正确的软件包,并且ldconfig没有找到它,则它可能只是在非标准目录中 . 默认情况下,ldconfig查找
/lib
,/usr/lib
以及/etc/ld.so.conf
和$LD_LIBRARY_PATH
中列出的目录 . 如果您的库位于其他位置,您可以在/etc/ld.so.conf
中将其目录添加到自己的行中,将库的路径追加到$LD_LIBRARY_PATH
,或将库移动到/usr/lib
. 然后运行ldconfig
.要找出图书馆的位置,请尝试以下方法:
(将
libraryname
替换为您的库的名称)如果您使用
$LD_LIBRARY_PATH
路线,则需要将其放入~/.bashrc
文件中,以便每次登录时都会运行:我有类似的错误,我可以通过给予解决它,
希望这可以帮助 .
在编译.c文件时,需要确保在链接期间指定库路径:
-Wl,-R部分告诉生成的二进制文件在运行时在/ usr / local / lib中查找库,然后再尝试使用/ usr / lib /中的库
希望它会对你有所帮助 .
linux.org参考页面解释了机制,但没有解释它背后的任何动机:-(
为此,请参阅Sun Linker and Libraries Guide
此外,请注意"external versioning"在Linux上基本上已经过时,因为符号版本控制(GNU扩展)允许您在单个库中存在同一函数的多个不兼容版本 . 这个扩展允许glibc拥有相同的外部版本:过去10年的
libc.so.6
.尝试将
LD_LIBRARY_PATH
(表示搜索路径)添加到~/.bashrc
文件中有用!
最后添加这些行
另一种可能的解决方案取决于您的情
如果您知道libpthread_rt.so.1与libpthread_rt.so相同,那么您可以通过以下方式创建符号链接:
然后
ls -l /lib
现在应该显示符号链接及其指向的内容至 .尝试安装sudo lib32z1
我所要做的就是跑:
我在位于
/usr/lib/x86_64-linux-gnu
的文件夹中,它工作得很好 .如果在Microsoft Windows上运行应用程序,则需要在PATH环境变量中定义动态库(.dll)的路径 .
如果在UNIX上运行应用程序,则需要在LD_LIBRARY_PATH环境变量中定义动态库(.so)的路径 .
我有一个类似的错误,并没有解决在〜/ .bashrc中给出LD_LIBRARY_PATH . 解决我的问题的方法是添加.conf文件并加载它 . 去终端一个在su .
在此文件中添加库路径并保存 . (例如:/ usr / local / lib) . 您必须运行以下命令才能激活路径:
验证您的新库路径:
如果这显示了您的库文件,那么您很高兴 .
在Linux x86上使用Eclipse CDT运行我的应用程序时出现此错误 .
解决这个问题:
由于系统无法引用所提及的库文件,因此会发生错误 . 采取以下步骤:
运行
locate libpthread_rt.so.1
将列出具有该名称的所有文件的路径 . 我们假设一条路径是/home/user/loc
.复制路径并运行
cd home/USERNAME
. 将USERNAME替换为您要用于运行该文件的当前活动用户的名称 .运行
vi .bash_profile
并在LD_LIBRARY_PATH
参数的末尾,就在.
之前,添加/lib://home/usr/loc:.
行 . 保存文件 .关闭终端并重启应用程序 . 它应该运行 .
我收到了这个错误,我认为这与你的原因相同
试试这个 . Fix permissions 关于文件:
“sudo su”获取文件系统的权限 .
我收到了这个错误,我认为这与你的原因相同
试试这个 . 修复文件权限: