cmake, gcc, cuda and -m32

3

我发现在我的Mac上CUDA不能在64位模式下工作(或者到目前为止还无法运行)。因此,我决定将所有内容编译为32位。

我使用的是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有效,但对于链接无效。


2
发现如果使用以下标志调用cmake,它可以正常工作: -DCMAKE_C_FLAGS=-m32 --DCMAKE_CXX_FLAGS=-m32 - Nils
我想我弄清楚了...set(CMAKE_C_FLAGS -m32) set(CMAKE_CXX_FLAGS -m32) - Nils
3个回答

4

如果在运行cmake项目之前设置环境变量LDFLAGS,那么它也可以正常工作:

export LDFLAGS=-m32
cmake ../source

3
请参见上文。
set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_FLAGS -m32)

现在你已经解决了这个问题,你应该将答案标记为已接受,这样当我们查看问题列表时,就可以看到它已经被回答了。 :) - Brooks Moses
你必须等待大约三天左右才能接受自己的答案:D所以我接受了Bill Hoffman的答案。 - Nils

1

另一种解决方案可能是这样说:

if (Apple)
  set (CMAKE_OSX_ARCHITECTURES i386)
  set (CUDA_64_BIT_DEVICE_CODE OFF) 
endif (Apple)

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接