在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
。
答案 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