.cpp + .cu文件的CMake文件

时间:2015-03-27 19:32:34

标签: c++ opencv cuda cmake

我是opencv和CMake的新手。我有一个.cpp文件,它将给定图像预处理到主机和设备上的一对uchar或uint8数组中。第一个数组包含原始图像值强度(在主机和设备上)。第二个数组包含在设备上执行的简单反转(255像素值),然后稍后复制到设备上。

我编写了我的CMakefile来查找cuda可执行文件并链接到主cpp文件。但我得到一个错误,其中找不到“主”功能。错误类似于relocation 0 has invalid symbol index 11

 cmake_minimum_required(VERSION 2.8)
 project( preProcess )
 find_package( OpenCV REQUIRED )
 find_package(CUDA REQUIRED)
 include(FindCUDA)

 include_directories(/usr/local/cuda/include)
 set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30)

 file( GLOB  cu  *.cu)
 add_executable( preProcess preProc.cpp )
 CUDA_ADD_EXECUTABLE(test ${preProcess} ${cu})
 target_link_libraries(preProcess /usr/local/cuda/lib64/libcudart.so  ${OpenCV_LIBS} )

当我检查我的Makefile时,没有nvcc命令。如果您可以指导我如何为包含cpp文件和cu文件的项目创建CMakeLists.txt文件并将它们链接在一起或在我的CMakeLists文件中详细说明我做错了,那就太棒了。

(我正在使用Ubuntu 14.04和CUDA 7以及opencv 2.4.11)

1 个答案:

答案 0 :(得分:1)

您需要将所有文件添加到cuda_add_executable

http://www.cmake.org/cmake/help/v3.0/module/FindCUDA.html

  

所有非CUDA C文件都是使用该标准编译的      构建由CMAKE指定的规则,并使用nvcc和主机编译器将cuda文件编译为目标文件。

project( preProcess )
find_package( OpenCV REQUIRED )
find_package(CUDA REQUIRED)
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30)

file( GLOB  cu  *.cu)
cuda_add_executable( preProcess preProc.cpp ${cu} )
target_link_libraries( preProcess ${OpenCV_LIBS} )