程序是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                                 

.1是文件名的最后部分吗?这到底是什么意思?


当前回答

linux.org参考页面解释了机制,但没有解释背后的动机:-(

为此,请参阅Sun Linker和图书馆指南

此外,请注意,“外部版本控制”在Linux上基本上已经过时了,因为符号版本控制(GNU扩展)允许您在单个库中呈现同一个函数的多个不兼容版本。这个扩展允许glibc拥有相同的外部版本:libc.so。过去10年有6个。

其他回答

更新 虽然我下面所写的是关于共享库的一般答案,但我认为这类消息最常见的原因是因为您安装了一个包,但没有安装该包的-dev版本。


好吧,这不是撒谎——没有libpthread_rt.so。该列表中的1。您可能需要重新配置和重新构建它,以便它取决于您拥有的库,或者安装任何提供libpthread_rt.so.1的库。

Generally, the numbers after the .so are version numbers, and you'll often find that they are symlinks to each other, so if you have version 1.1 of libfoo.so, you'll have a real file libfoo.so.1.0, and symlinks foo.so and foo.so.1 pointing to the libfoo.so.1.0. And if you install version 1.1 without removing the other one, you'll have a libfoo.so.1.1, and libfoo.so.1 and libfoo.so will now point to the new one, but any code that requires that exact version can use the libfoo.so.1.0 file. Code that just relies on the version 1 API, but doesn't care if it's 1.0 or 1.1 will specify libfoo.so.1. As orip pointed out in the comments, this is explained well at here.

在您的情况下,可以使用libpthread_rt.so符号链接。1到libpthread_rt.so。不过,不能保证它不会破坏你的代码并吃掉你的电视晚餐。

我要做的就是跑

sudo apt-get install libfontconfig1

我在位于/usr/lib/x86_64-linux-gnu的文件夹中,它工作得很好。

cd /home/<user_name>/
sudo vi .bash_profile

把这几行加在末尾

LD_LIBRARY_PATH=/usr/local/lib:<any other paths you want>
export LD_LIBRARY_PATH

由于系统无法引用提到的库文件而发生错误。采取以下步骤:

执行locate libpthread_rt.so。1将列出所有具有该名称的文件的路径。假设路径是/home/user/ loco。 拷贝路径,执行cd home/USERNAME命令。将USERNAME替换为要运行该文件的当前活动用户的名称。 运行vi .bash_profile,在LD_LIBRARY_PATH参数的末尾,就在.之前,添加一行/lib://home/usr/loc:..保存文件。 关闭终端并重新启动应用程序。它应该运行。

尝试在~/中添加LD_LIBRARY_PATH,它指示搜索路径。bashrc文件(

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_your_library

它的工作原理!