加载共享库时发生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结尾是文件名的一部分。那到底是什么意思呢?

回答:

尽管下面我写的是关于共享库的一般答案,但我认为这类消息的最常见原因是因为您已经安装了一个软件包,但没有安装该软件包的“ -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。但是,不能保证它不会破坏您的代码并吃您的电视晚餐。

以上是 加载共享库时发生Linux错误:无法打开共享对象文件:没有这样的文件或目录 的全部内容, 来源链接: utcz.com/qa/435734.html

回到顶部