我只是试图用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