web-dev-qa-db-ja.com

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

(読みやすさのためにフォーマットされています)

(私はgdbを使用して実行しています M-xgdb)それが重要な場合、CUDAライブラリは.bashrcにあります

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

共有ライブラリのロード中にエラーが発生しました: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 envShell envecho "Here"~/.basrcに追加するなどして、期待どおりに機能していない場所を見つけることができます。

21

私もこの問題を抱えています。これを確認する1つの方法は、gdbにshow envを入力したときにLD_LIBRARY_PATH変数が正しい場合でも、gdbがプログラムを実行するために$Shell -c <program>を実行するため、実際にプログラムを実行するときに正しくない可能性があることです。これをテストとして試して、コマンドラインから$Shellを実行してから、echo $LD_LIBRARY_PATHを実行します。それが正しいか?そうでない場合は、おそらくそれをrc(私の場合は.tcshrc)に追加する必要があります。

2
Tim

Windows 7でgdbを実行しようとしたときに、同様の問題が発生しました。MobaXtermを使用してLinuxツールボックスにアクセスします。 gdbを http://www.gnu.org/software/gdb/ とは別にインストールしました。 Employed Russianが述べたように、gdbが正しい.dllファイルを見つけられるようにすることで動作させました。 MobaXtermがインストールされている場合、.dllファイルはMobaXterm/slash/binのホームディレクトリに表示されます。

ただし、gdbはLD_LIBRARY_PATH変数を認識しませんでした。私にとっては、代わりにPATH変数を使用したときに機能しました。

    (gdb) set env PATH C:\Users\Joshua\Documents\MobaXterm\slash\bin
    (gdb) run

ライブラリへの正しいパスを設定すれば、LD_LIBRARY_PATHの代わりにPATHを使用するとうまくいくと思います。

2
Joshua Brown

gdbはライブラリを探していますが、なぜインクルードパスに関心があるのですか? libcudart.so.5.0ライブラリの場所を指すようにgdbオプション「solib-search-path」を設定してみることをお勧めします。

1
anoneironaut