我只是想使用 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
我不知道该以哪种方式寻找解决方案。任何帮助表示赞赏!
EDIT:
这是我的完整链接命令(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
I use 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 示例效果很好。
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