【发布时间】:2015-01-15 13:06:23
【问题描述】:
我有一个 CUDA 程序 (cuda_test.cc),我什至想在没有 CUDA 设备的机器上运行它(在这种情况下,它将在 cpu 而不是 gpu 上执行算法)。 从命令行来看是相当简单的:
machine-with-cuda$ nvcc -ccbin g++ -o cuda_test cuda_test.cc
machine-without-cuda$ ./cuda_test
You don't have a CUDA device
但是,我需要使用 cmake,因为我的程序将包含在使用 cmake 的现有库中。 Cmake 总是用 -rdynamic /usr/local/cuda/lib64/libcudart.so 调用 c++,所以我最终得到了一个链接到 libcudart.so 的可执行文件,
machine-with-cuda$ cat CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
FIND_PACKAGE(CUDA)
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -ccbin g++")
CUDA_ADD_EXECUTABLE(cuda_test cuda_test.cc)
machine-with-cuda$ make
...
/usr/bin/c++ CMakeFiles/cuda_test.dir/cuda_test.cc.o -o cuda_test -rdynamic /usr/local/cuda/lib64/libcudart.so -Wl,-rpath,/usr/local/cuda/lib64
...
machine-without-cuda$ ./cuda_test
error while loading shared libraries: libcudart.so.6.5: cannot open shared object file: No such file or directory
(请注意,即使在编译 .cu 文件而不是 .cc 文件时,我仍然会得到一个链接到 libcudart.so 的可执行文件。
如何防止 cmake 链接到 libcudart.so?或者是否有其他方法可以确保即使未安装 cuda 也能运行我的程序?
非常感谢
【问题讨论】: