【发布时间】:2015-08-04 17:11:27
【问题描述】:
在 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。
【问题讨论】:
-
该目录中有
libcudart.so.7.0吗?也许它真的是libcudart.so.7.0.1.2.3.4.5.6,并且没有建立到“普通”.so.7.0的符号链接。或 so.7.0 符号链接存在,但悬空。 -
不,我整个系统上唯一的
libcudart.so.7.0在/usr/local/cuda-7.0/lib64中。 -
ldd ./mt_test 说什么?
-
可能是 332 位/64 位问题?
mt_test程序是 64 位二进制文件吗?使用file mt_test并查看它是否报告i386 或x86_64。您的libcudart是一个 64 位库,因此如果mt_test是一个 32 位二进制文件,它将无法工作。但是,如果您没有/找不到正确的共享库,我很惊讶它首先链接。除非它使用dlopen()访问库而不是运行时链接器?
标签: c++ ubuntu linker makefile shared-libraries