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"
共有ライブラリのロード中にエラーが発生しました: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"
を~/.basrc
に追加するなどして、期待どおりに機能していない場所を見つけることができます。
私もこの問題を抱えています。これを確認する1つの方法は、gdbにshow env
を入力したときにLD_LIBRARY_PATH変数が正しい場合でも、gdbがプログラムを実行するために$Shell -c <program>
を実行するため、実際にプログラムを実行するときに正しくない可能性があることです。これをテストとして試して、コマンドラインから$Shell
を実行してから、echo $LD_LIBRARY_PATH
を実行します。それが正しいか?そうでない場合は、おそらくそれをrc(私の場合は.tcshrc)に追加する必要があります。
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
を使用するとうまくいくと思います。
gdbはライブラリを探していますが、なぜインクルードパスに関心があるのですか? libcudart.so.5.0ライブラリの場所を指すようにgdbオプション「solib-search-path」を設定してみることをお勧めします。