2

診断と修正が簡単なはずの問題のように思われることに困惑しています。CUDAドライバーAPIを利用するC++ソースファイルがあります。を使用してコンパイルするとnvcc、実行可能ファイルが生成され、問題なく動作します。ただし、を使用してコンパイルしようとするとg++、リンカは次のシンボルへの未定義の参照について文句を言います/usr/lib/libcuda.so

undefined reference to cuDeviceGet'
... undefined reference tocuDeviceComputeCapability'
... undefined reference to cuDeviceGetName'
... undefined reference tocuDeviceTotalMem_v2'
... undefined reference to cuDeviceGetAttribute'
... undefined reference tocuDeviceGetAttribute'
... undefined reference to cuDeviceGetAttribute'
... undefined reference tocuDeviceGetAttribute'

それがライブラリパスに含まれていることを確認しようとし/usr/libました(フラグ、、-L/usr/libを指定し-lcuda、に追加/usr/libすることにより$LIBRARY_PATH)。ただし、問題は解決しません。/usr/lib/libcuda.soリンカが不平を言っている記号が含まれていると確信しています。

$ nm -D /usr/lib/libcuda.so | grep cuDeviceGet
00000000000be410 T cuDeviceGet
00000000000bf120 T cuDeviceGetAttribute
00000000000d2e10 T cuDeviceGetByPCIBusId
00000000000be200 T cuDeviceGetCount
00000000000bdfa0 T cuDeviceGetName
00000000000d2bb0 T cuDeviceGetPCIBusId
00000000000bf380 T cuDeviceGetProperties
nvccファイルを正常にコンパイルするのは 奇妙だと思いますが、そうでg++はありません。この問題をどのように修正できるかについて何か考えがありますか?

ご助力ありがとうございます!

4

1 に答える 1

2

ファイルをコンパイルできなかったのは、ファイル名の-lcudaにフラグを付ける必要があるためです。それ以外の場合は機能しません...この情報を伝えるコンパイラーによる大きくて目立つ警告があれば、非常にありがたいです。いやあ、無駄な2時間でした。

于 2012-05-01T18:59:31.840 に答える