找不到库,即使它位于搜索路径

时间:2015-08-04 17:11:28

标签: c++ ubuntu linker makefile shared-libraries

在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

1 个答案:

答案 0 :(得分:1)

正如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