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

(为便于阅读而格式化)

(我正在使用 gdb 运行M-xgdb)如果这很重要,那么 CUDA 库在.bashrc

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

4 回答 4

25

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

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

导出 LD_LIBRARY_PATH="$LD_LIBRARY_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 env, shell env, 添加echo "Here"到 your~/.basrc等应该可以帮助您找到没有按预期工作的地方。

于 2013-02-24T16:48:35.843 回答
3

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

于 2014-01-27T19:49:31.993 回答
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

于 2015-06-09T18:24:29.390 回答
1

gdb 正在寻找一个库,那么您为什么要关心包含路径呢?您可能想尝试将 gdb 选项“solib-search-path”设置为指向 libcudart.so.5.0 库的位置。

于 2013-02-24T06:59:27.633 回答