程序是Xenomai测试套件的一部分,从Linux交叉编译到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
编辑:好的,我没有注意到最后的.1是文件名的一部分。这到底是什么意思?
发布于 2009-01-26 18:11:59
更新
虽然我在下面写的关于共享库的一般答案是正确的,但我认为导致这些消息的最常见的原因是因为您安装了一个软件包,但没有安装该软件包的-dev
版本。
好吧,这不是骗人的--该清单中没有libpthread_rt.so.1
。您可能需要重新配置和重新构建它,使其依赖于您拥有的库,或者安装提供libpthread_rt.so.1
的任何东西。
通常,.so后面的数字是版本号,并且您经常会发现它们是相互之间的符号链接,所以如果您使用的是1.1版的libfoo.so,那么您将拥有一个真正的文件libfoo.so.1.0,并且符号链接foo.so和foo.so.1指向libfoo.so.1.0。如果您安装了1.1版而没有删除另一个版本,那么您将拥有一个libfoo.so.1.1,libfoo.so.1和libfoo.so现在将指向新的版本,但是任何需要该版本的代码都可以使用libfoo.so.1.0文件。只依赖于版本1 API,而不关心版本是1.0还是1.1的代码将指定libfoo.so.1。正如orip在评论中指出的那样,at here很好地解释了这一点。
在您的例子中,您可以将libpthread_rt.so.1
符号链接到libpthread_rt.so
。然而,不能保证它不会破坏你的代码,吃掉你的电视晚餐。
发布于 2014-01-17 06:07:15
您的库是一个动态库。你需要告诉操作系统在运行时它可以在哪里找到它。
要做到这一点,我们需要执行这些简单的步骤:
sudo find / -name the_name_of_the_file.so
检查是否存在动态库路径环境variable(LD_LIBRARY_PATH
)的
$ echo $LD_LIBRARY_PATH
如果没有要显示的内容,则添加默认路径值(如果愿意,也可以不添加)。
$ LD_LIBRARY_PATH=/usr/local/lib
我们添加所需的路径,将其导出并尝试application.,然后使用
请注意,路径应该是path.so.something
所在的目录。因此,如果path.so.something
在/my_library/path.so.something
中,它应该是:
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app
发布于 2015-02-12 01:11:07
这里有几个你可以尝试的解决方案:
ldconfig
正如AbiusX指出的:如果你刚刚安装了这个库,你可能只需要运行ldconfig。
sudo ldconfig
usr ldconfig创建必要的链接和缓存,指向在命令行指定的目录、文件/
/ld.so.conf和受信任目录(/lib和/usr/lib)中找到的最新共享库。
通常,您的包管理器会在您安装新库时处理此问题,但并非总是如此,运行ldconfig也不会有什么坏处,即使这不是您的问题。
开发包或版本错误
如果这不起作用,我还会查看Paul's suggestion并查找该库的"-dev“版本。许多库被分成开发包和非开发包。您可以使用以下命令来查找它:
apt-cache search <libraryname>
如果您只是安装了错误版本的库,这也会有所帮助。有些库同时以不同的版本发布,例如Python。
库位置
如果您确定安装了正确的软件包,但ldconfig没有找到它,那么它可能只是位于非标准目录中。默认情况下,ldconfig在/lib
、/usr/lib
以及/etc/ld.so.conf
和$LD_LIBRARY_PATH
中列出的目录中查找。如果您的库在其他位置,您可以在/etc/ld.so.conf
中将目录添加到它自己的行上,将库的路径附加到$LD_LIBRARY_PATH
,或者将库移到/usr/lib
中。然后运行ldconfig
。
要查找该库的位置,请尝试以下命令:
sudo find / -iname *libraryname*.so*
(将libraryname
替换为库的名称)
如果使用$LD_LIBRARY_PATH
路径,则需要将其放入~/.bashrc
文件中,这样每次登录时它都会运行:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library
https://stackoverflow.com/questions/480764
复制相似问题