找不到图书馆,即使它在搜索路径上

Cannot find library, even though it is on search path

本文关键字:搜索 路径 图书馆 找不到      更新时间:2023-10-16

在Ubuntu 14.04中,我下载了一些源代码,这些源代码附带了一个makefile。然后我在它上面运行"make"来编译,这将构建一个可执行文件。当执行这个文件时,我收到以下错误:

./mt_test: error while loading shared libraries: libcudart.so.7.0: cannot open shared object file: No such file or directory

现在,文件libcudart.so.7.0位于目录/usr/local/cuda-7.0/lib64。但是在我的.bashrc文件中,我有一行:export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH。此外,如果我从终端运行echo $LD_LIBRARY_PATH,其中一个条目就是这个路径。在我的系统中没有libcudart.so.7.0的其他副本。

是否有任何原因导致可执行文件可能无法找到这个库,即使它的目录是搜索目录之一?

奇怪的是,这个错误只发生在我的系统上安装Matlab之后。现在有一个名为libcudart.so.6.5的文件位于/usr/local/MATLAB/R2015a/bin/glnxa64,但该路径不是LD_LIBRARY_PATH的一部分。

正如MadScientist可能正确猜测的那样,这可能是32位与64位的不匹配。执行如下命令:

file -L ./mt_test /usr/local/cuda-7.0/lib64/libcudart.so.7.0

对于两个文件,该命令应该报告ELF 32-bit LSB ...ELF 64-bit LSB ...。如果其中一个文件是32位的,而另一个是64位的,那么它们是不兼容的。

您可以通过运行以下命令进一步了解动态链接器在哪里搜索libcudart.so.7.0:

LD_DEBUG=files,libs ./mt_test