cuda 5.0 プレビューを使用して古いプロジェクトを構築しようとしています。リンク時にエラーが発生し、特定の cuda 関数が見つからないというメッセージが表示されます。例えば:
undefined reference to 'cudaMalloc'
.
リンク コマンドには、 cuda の次のオプションが含まれています。
-L/usr/local/cuda/lib64 -L/home/myhome/NVIDIA_CUDA_Samples/C/lib -L/home/myhome/NVIDIA_CUDA_Samples/C/common/lib/linux -lcudart
ls -lah /usr/local/cuda/lib64/
libcudart.so.5.0.7 を含む 8 つの cuda ライブラリと、.so-file-end のみを使用したシンボリック リンクが提供されます。
ls /home/myhome/NVIDIA_CUDA_Samples/C/lib/
空のディレクトリが表示されますが、これは奇妙なことですか?
ls /home/myhome/NVIDIA_CUDA_Samples/C/common/lib/linux/
libGLEW.a のみを含む i686 と x86_64 の 2 つのディレクトリが表示されます。
解決策を探す方法がわかりません。どんな助けでも大歓迎です!
編集:
これが私の完全なリンク コマンドです (TARGET_APPLICATION は私のバイナリで、x86_64/Objectfiles.o は nvcc でコンパイルされたオブジェクト ファイルを含むすべての (23) オブジェクト ファイルを表します)。
/home/myhome/nullmpi-0.7/bin/mpicxx -CC=g++ -I. -I/home/myhome/nullmpi-0.7/src -I/usr/lib/openmpi/include -L/usr/local/cuda/lib64 -L/home/myhome/NVIDIA_CUDA_Samples/C/lib -L/home/myhome/NVIDIA_CUDA_Samples/C/common/lib/linux -lcudart -o TARGET_APPLICATION x86_64/Objectfiles.o /usr/lib/liblapack.so /usr/lib/libblas.so /home/myhome/nullmpi-0.7/lib/libnullpmpi.a -lm
コンパイルとリンクにnullmpiを使用します(プロジェクトは MPI と CUDA を使用g++
します) -CC=g++
。
私のcudaオブジェクトファイルのコンパイルコマンド:
/usr/local/cuda/bin/nvcc -c -arch=sm_21 -L/home/myhome/NVIDIA_CUDA_Samples/C/lib -O3 kernelwrapper.cu -o x86_64/kernelwrapper.RELEASE.2.o
echo $LD_LIBRARY_PATH
結果:
/usr/local/cuda/lib64:/usr/local/cuda/lib:
echo $PATH
結果:
その他のオプション
:/usr/local/cuda/bin:/home/myhome/nullmpi-0.7/bin
私は64ビットを構築しています。完全を期すために、Ubuntu 12.04 でビルドしています。(64 ビット)。 CUDA サンプルのビルドは正常に機能します。
解決策(私に指摘してくれたtalonmiesに感謝します):
これは正しいリンク コマンドです。
/home/myhome/nullmpi-0.7/bin/mpicxx -CC=g++ -I. -I/home/myhome/nullmpi-0.7/src -I/usr/lib/openmpi/include -L/usr/local/cuda/lib64 -L/home/myhome/NVIDIA_CUDA_Samples/C/lib -L/home/myhome/NVIDIA_CUDA_Samples/C/common/lib/linux -o TARGET_APPLICATION x86_64/Objectfiles.o /usr/lib/liblapack.so /usr/lib/libblas.so /home/myhome/nullmpi-0.7/lib/libnullpmpi.a -lcudart -lm