一尘不染

加载共享库时发生Linux错误:无法打开共享对象文件:没有这样的文件或目录

linux

该程序是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结尾是文件名的一部分。那到底是什么意思呢?


阅读 2012

收藏
2020-06-02

共1个答案

一尘不染

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


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

通常,.so后面的数字是版本号,并且您经常会发现它们是彼此的符号链接,因此,如果您具有libfoo.so
1.1版,则将拥有一个真实的文件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在评论中指出的那样,这在http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html进行了很好的解释。

在你的情况,你 可能会
逃脱符号链接libpthread_rt.so.1libpthread_rt.so。但是,不能保证它不会破坏您的代码并吃您的电视晚餐。

2020-06-02