如何为GDB加载额外的库?

时间:2013-02-24 06:53:45

标签: c++ emacs cuda gdb

我正在尝试调试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"

4 个答案:

答案 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 envshell 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库的位置。