【问题标题】:cmake, gcc, cuda and -m32cmake、gcc、cuda 和 -m32
【发布时间】:2011-02-06 17:34:59
【问题描述】:

我发现 CUDA 在我的 mac 上无法在 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,但不适用于链接..

【问题讨论】:

  • 发现如果我使用以下标志调用 cmake,它会起作用:-DCMAKE_C_FLAGS=-m32 --DCMAKE_CXX_FLAGS=-m32
  • 我想我明白了.. set(CMAKE_C_FLAGS -m32) set(CMAKE_CXX_FLAGS -m32)

标签: macos cmake cuda


【解决方案1】:

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

export LDFLAGS=-m32
cmake ../source

【讨论】:

    【解决方案2】:

    见上

    set(CMAKE_C_FLAGS -m32)
    set(CMAKE_CXX_FLAGS -m32)
    

    【讨论】:

    • 既然您已经解决了问题,您应该将答案标记为已接受,以便我们其他人在查看问题列表时可以看到它已被回答。 :)
    • 您必须等待三天左右才能接受自己的答案:D 所以我接受了 Bill Hoffman 的答案..
    【解决方案3】:

    另一种解决方案可能是:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 2011-05-21
      • 2012-12-09
      • 2014-04-13
      • 2017-09-22
      • 2011-09-14
      • 2010-12-17
      • 2021-01-04
      • 2022-01-06
      相关资源
      最近更新 更多