我只是想使用 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/
给了我 8 个 cuda 库,包括 libcudart.so.5.0.7 以及仅使用 .so 文件结尾的符号链接。
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
结果是:
其他选项
:/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