.cpp+.cu 文件的 CMake 文件
CMake file for .cpp+.cu files
我是 opencv 和 CMake 的新手。我有一个 .cpp 文件,它在主机和设备上将给定图像预处理为一对 uchar 或 uint8 数组。第一个数组包含原始图像值强度(在主机和设备上)。第二个数组包含在设备上执行然后复制到设备上的简单反转(255 像素值)。
我写了我的 CMakefile 来查找 cuda 可执行文件和 link 针对主 cpp 文件。但是我得到一个错误,其中找不到 "main" 函数。错误类似于 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 命令。如果你能指导我如何为一个项目创建一个 CMakeLists.txt 文件,同时包含 cpp 文件和 cu 文件并将它们 link 在一起,或者详细说明我在 CMakeLists 文件中做错了什么,它将是太好了。
(我正在使用 Ubuntu 14.04 与 CUDA 7 和 opencv 2.4.11)
您需要将 所有 文件添加到 cuda_add_executable
:
http://www.cmake.org/cmake/help/v3.0/module/FindCUDA.html
All of the non CUDA C files are compiled using the standard
build rules specified by CMAKE and the cuda files are compiled to object files using nvcc and the host compiler.
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} )
我是 opencv 和 CMake 的新手。我有一个 .cpp 文件,它在主机和设备上将给定图像预处理为一对 uchar 或 uint8 数组。第一个数组包含原始图像值强度(在主机和设备上)。第二个数组包含在设备上执行然后复制到设备上的简单反转(255 像素值)。
我写了我的 CMakefile 来查找 cuda 可执行文件和 link 针对主 cpp 文件。但是我得到一个错误,其中找不到 "main" 函数。错误类似于 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 命令。如果你能指导我如何为一个项目创建一个 CMakeLists.txt 文件,同时包含 cpp 文件和 cu 文件并将它们 link 在一起,或者详细说明我在 CMakeLists 文件中做错了什么,它将是太好了。
(我正在使用 Ubuntu 14.04 与 CUDA 7 和 opencv 2.4.11)
您需要将 所有 文件添加到 cuda_add_executable
:
http://www.cmake.org/cmake/help/v3.0/module/FindCUDA.html
All of the non CUDA C files are compiled using the standard build rules specified by CMAKE and the cuda files are compiled to object files using nvcc and the host compiler.
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} )