我正在尝试调试CUDA程序,但是当我像这样启动gdb
时:
$ gdb -i=mi <program name>
$ r <program arguments>
我得到了:
/home/wvxvw/Projects/cuda/exercise-1-udacity/cs344/HW2/hw:
error while loading shared libraries: libcudart.so.5.0:
cannot open shared object file: No such file or directory
Process gdb-inferior killed
(为便于阅读而格式化)
(我正在使用 M-x gdb
运行gdb)如果这很重要,那么CUDA库就在.bashrc
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
答案 0 :(得分:19)
加载共享库时出现错误:libcudart.so.5.0
此错误与GDB无关:从GDB内部运行时,您的可执行文件无法找到所需的库。
export LD_LIBRARY_PATH =&#34; $ LD_LIBRARY_PATH:/ usr / local / cuda / lib64&#34;
GDB以新的$SHELL
运行您的程序,因此应该有效。我想知道是否与emacs有一些互动。
无论如何,这个:
(gdb) set env LD_LIBRARY_PATH /usr/local/cuda/lib64
(gdb) run
应该解决这个问题。
<强>更新强>:
正如我之前提到的那样,ld路径设置正确
不,不是。如果是的话,你就不会有问题。
现在,我不知道为什么没有正确设置。如果你真的想知道,首先在emacs之外运行GDB(以排除可能的emacs交互)。
如果问题仍然存在,gdb show env
,shell env
,将echo "Here"
添加到~/.basrc
等等应该可以帮助您找到不合适的地方期待他们。
答案 1 :(得分:2)
我也遇到过这个问题。查看它的一种方法是,即使将show env
输入到gdb中时LD_LIBRARY_PATH变量是正确的,但在实际执行程序时它可能不正确,因为gdb执行$SHELL -c <program>
来运行程序。尝试将其作为测试,从命令行运行$SHELL
,然后echo $LD_LIBRARY_PATH
。这是对的吗?如果没有,那么你可能需要将它添加到你的rc(在我的情况下为.tcshrc)。
答案 2 :(得分:2)
尝试在Windows 7上运行gdb时遇到了类似的问题。我使用MobaXterm来访问Linux工具箱。我从http://www.gnu.org/software/gdb/单独安装了gdb。我通过确保gdb可以找到Employed Russian提到的正确的.dll文件来实现它。如果安装了MobaXterm,则.dll文件应出现在MobaXterm / slash / bin的主目录中。
然而, gdb无法识别LD_LIBRARY_PATH
变量。对我来说,当我使用PATH变量时它起作用了:
(gdb) set env PATH C:\Users\Joshua\Documents\MobaXterm\slash\bin
(gdb) run
如果您将正确的路径放到库中,我认为使用PATH
代替LD_LIBRARY_PATH
可能对您有用。
答案 3 :(得分:1)
gdb正在寻找一个库,那你为什么要关注包含路径呢?您可能想尝试设置gdb选项&#34; solib-search-path&#34;指向libcudart.so.5.0库的位置。