在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