2010-04-11 64 views
2

我发现CUDA在我的mac上无法在64位模式下工作(或者目前无法运行它)。所以我决定编译一切为32位。cmake,gcc,cuda和-m32

我使用的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,而不是链接..

+1

想通了,它的工作原理,如果我的cmake调用与以下标志: -DCMAKE_C_FLAGS = -m32 --DCMAKE_CXX_FLAGS = -m32 – Nils 2010-04-11 15:33:07

+0

我想我想通了.. 集(CMAKE_C_FLAGS -m32) 集(CMAKE_CXX_FLAGS -m32) – Nils 2010-04-11 15:50:06

回答

2

如果你运行该项目的cmake前,将工作,以及设定的环境变量LDFLAGS

export LDFLAGS=-m32 
cmake ../source 
3

见上

set(CMAKE_C_FLAGS -m32) 
set(CMAKE_CXX_FLAGS -m32) 
+0

现在你已经解决了这个问题,你应该将答案标记为可接受的,这样当我们查看问题列表时,我们其他人就可以看到答案。 :) – 2010-04-12 19:54:54

+0

你必须等待三天左右,直到你可以接受你自己的答案:D所以我接受了Bill Hoffman的答案。 – Nils 2010-04-13 08:56:45

1

另一种解决方案,他们会说:

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

希望这有助于。