在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

10-07 19:45