【问题标题】:CMake file for .cpp+.cu files.cpp+.cu 文件的 CMake 文件
【发布时间】:2015-06-01 06:13:42
【问题描述】:

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

我编写了 CMakefile 来查找 cuda 可执行文件并链接到主 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 命令。如果您能指导我如何为包含 cpp 文件和 cu 文件的项目创建 CMakeLists.txt 文件并将它们链接在一起或详细说明我在 CMakeLists 文件中做错了什么,那就太好了。

(我正在使用带有 CUDA 7 和 opencv 2.4.11 的 Ubuntu 14.04)

【问题讨论】:

    标签: c++ opencv cuda cmake


    【解决方案1】:

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

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

    所有非 CUDA C 文件均使用标准编译 CMAKE 指定的构建规则和 cuda 文件使用 nvcc 和主机编译器编译为目标文件。

    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} )
    

    【讨论】:

    • GLOB 不是 CUDA 特定的,请参阅cmake.org/cmake/help/v3.0/command/file.html:“GLOB 将生成与通配表达式匹配的所有文件的列表并将其存储到变量中。”
    • 谢谢。编译成功了,但不幸的是我认为我的 CUDA 内核有问题stackoverflow.com/questions/29324054/…
    • 是否可以使用 CMake 指定部分 .cpp 文件应视为 .cu 文件?
    • @user2023370 是的,这可以通过CUDA_SOURCE_PROPERTY_FORMAT 完成。如果您需要更详细的答案,请提出一个新问题。
    猜你喜欢
    • 2023-03-23
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多