如何为GDB加载额外的库

How to load extra libraries for GDB?

本文关键字:加载 GDB      更新时间:2023-10-16

我正试图调试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-xgdb运行gdb(如果这很重要,那么CUDA库在.bashrc

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"

加载共享库时出错:libcudart.so.5.0

此错误与GDB无关:从GDB内部运行可执行文件时,无法找到所需的库。

export LD_LIBRARY_PATH="$LD_LIBRRAY_PATH:/usr/local/cuda/lib64">

GDB在一个新的$SHELL中运行您的程序,所以这应该是有效的。我想知道是否与emacs有一些互动。

无论如何,这个:

(gdb) set env LD_LIBRARY_PATH /usr/local/cuda/lib64
(gdb) run

应该解决这个问题。

更新

正如我之前提到的,ld路径设置正确

不,它不是。如果是的话,你就不会有问题了。

现在,我不知道为什么设置不正确。如果您真的想知道,可以从在emacs之外运行GDB开始(以排除可能的emacs交互(。

如果问题仍然存在,gdb show envshell env、将echo "Here"添加到您的~/.basrc等应该可以帮助您找到问题所在。

我也遇到过这个问题。一种方法是,即使在gdb中输入show env时LD_LIBRARY_PATH变量是正确的,但在实际执行程序时也可能不正确,因为gdb执行$SHELL -c <program>来运行程序。将此作为测试进行尝试,从命令行运行$SHELL,然后运行echo $LD_LIBRARY_PATH。这是正确的吗?如果没有,那么您可能需要将它添加到您的rc中(在我的例子中是.tcshrc(。

我在Windows7上运行gdb时遇到了类似的问题。我使用MobaXterm访问Linux工具箱。我单独安装了gdbhttp://www.gnu.org/software/gdb/。我通过确保gdb能够找到Employed Russian提到的正确的.dll文件来实现它。如果你安装了MobaXterm,.dll文件应该出现在你的主目录MobaXtterm/srash/bin中。

gdb没有识别出CCD_ 13变量。对我来说,当我使用PATH变量时,它起了作用:

    (gdb) set env PATH C:UsersJoshuaDocumentsMobaXtermslashbin
    (gdb) run

我认为使用PATH而不是LD_LIBRARY_PATH可能对您有用,前提是您放置了正确的库路径。

gdb正在寻找一个库,那么为什么要关注include路径呢?您可能需要尝试将gdb选项"solib search path"设置为指向libcudart.so.5.0库的位置。