0

我正在尝试使用 CMake 生成一个 Xcode 项目并用它构建一个 CUDA 库。我用于收集和构建CUDA库“caffe2_cpp_gpu”的代码如下:

list(APPEND CUDA_NVCC_FLAGS "-std=c++11" "-Wno-deprecated-gpu-targets")    
file(GLOB CUDA_SOURCES "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.cu" )
  cuda_add_library(caffe2_cpp_gpu STATIC ${CUDA_SOURCES})
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang++" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
  list(APPEND ALL_LIBRARIES -Wl,-force_load caffe2_cpp_gpu)
else()
  list(APPEND ALL_LIBRARIES -Wl,--whole-archive caffe2_cpp_gpu -Wl,--no-whole-archive)
endif()

请注意,如果使用 Unix Makefile,则可以运行此代码。但如果使用 Xcode 则无法运行。
在项目中它显示一个文件丢失: 缺少文件
并且无法创建 CUDA 库“caffe2_cpp_gpu”。

有谁知道如何解决它?

4

1 回答 1

1

我找到了答案...如果我将另一种文件(.cc、.h 等)附加到 CUDA 库中,它将起作用。似乎 XCode 无法将单个 .cu 文件构建到静态库 (.a) 中。
所以这就是我所做的:

file(GLOB All_SOURCE "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.cu" "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.cc" "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.h")
cuda_add_library(caffe2_lib ${All_SOURCE})

而不是分别为 CPU 和 GPU 构建库。我将它们合并到一个库文件中。

于 2017-10-23T11:16:35.247 回答