我只是試圖用cuda 5.0預覽來構建我的舊項目。 鏈接時出現錯誤,告訴我某些cuda功能找不到。例如:Cuda 5.0鏈接問題
undefined reference to 'cudaMalloc'
。
我的鏈接命令包括CUDA以下選項:
-L在/ usr /本地/ CUDA/lib64下-L /家庭/ MYHOME/NVIDIA_CUDA_Samples/C/lib目錄-L /家庭/ MYHOME/NVIDIA_CUDA_Samples/C/common/lib目錄/ Linux的-lcudart
ls -lah /usr/local/cuda/lib64/
給了我8個CUDA庫,包括與僅使用的.so文件結束的符號鏈接libcudart.so.5.0.7。
ls /home/myhome/NVIDIA_CUDA_Samples/C/lib/
給我一個空目錄,這有點奇怪嗎?
ls /home/myhome/NVIDIA_CUDA_Samples/C/common/lib/linux/
給了我兩個目錄:爲i686和x86_64兩個只含libGLEW.a
我不知道要尋找一個解決方案的方式。任何幫助表示讚賞!
編輯:
這裏是我完整的鏈接命令(TARGET_APPLICATION是我的二進制和x86_64/Objectfiles.o代表所有(23)對象文件包括與NVCC編譯的目標文件):
/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
結果:
otherOptions
:/usr/local/cuda/bin:/home/myhome/nullmpi-0.7/bin
我要建64位。爲了完整起見,我構建在Ubuntu 12.04上。 (64位)。 構建CUDA示例正常工作。
SOLUTION(感謝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
請提供您的完整命令行以及您是否正在編譯32位或64位。 – harrism 2012-07-11 02:48:12
這很奇怪。我通常不需要鏈接任何標準CUDA程序。你記得修改LD_LIBRARY_PATH嗎? – sj755 2012-07-11 03:55:06
我沒有在您的編譯行中看到任何源文件或對象... – harrism 2012-07-11 07:29:23