我发现CUDA无法在我的Mac上以64位模式运行(或到目前为止无法运行)。因此,我决定为32bit编译所有内容。

我使用cmake 2.8并添加了以下选项

add_definitions(-Wall -m32)
set(CUDA_64_BIT_DEVICE_CODE OFF)
set(CMAKE_MODULE_LINKER_FLAGS -m32)

但是,当它尝试链接时,它会执行以下操作:
/usr/bin/c++    -mmacosx-version-min=10.6 -Wl,-search_paths_first -headerpad_max_install_names  CMakeFiles/SimpleTestsCUDA.dir/BlockMatrix.cpp.o CMakeFiles/SimpleTestsCUDA.dir/Matrix.cpp.o ./SimpleTestsCUDA_generated_SimpleTests.cu.o ./SimpleTestsCUDA_generated_BlockMatrix.cu.o  -o SimpleTestsCUDA  /usr/local/cuda/lib/libcudart.dylib /usr/local/cuda/lib/libcuda.dylib

失败的原因是ld发出了许多“文件不是必需的体系结构”警告。现在,如果我将-m32手动添加到上面的命令中,它将起作用。但是我不知道如何教cmake在每个gcc(或ld)调用中添加-m32。到目前为止,它对nvcc和gcc都适用,但对链接不适用。

最佳答案

如果在项目上运行cmake之前设置了env var LDFLAGS,它将同样有效:

export LDFLAGS=-m32
cmake ../source

10-08 08:27