我是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)
答案 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} )