代码之家  ›  专栏  ›  技术社区  ›  engineerRed

CMakeLists/可重定位设备链接步骤(cudaRegisterLinkedBinary错误)

  •  -1
  • engineerRed  · 技术社区  · 7 年前

    即使在列出并试图链接CMakeLists中的CUDA库之后,仍然存在“未定义对`\u cudaRegisterLinkedBinary…'的引用”的错误。

    “建议执行的前一个问题” " ( See Here

    CMake公司:
    库达: 9
    7.1.0
    乌班图 16.04

    编辑: 添加CMakeLists.txt

    CMakeLists.txt文件:

    cmake_minimum_required(VERSION 3.1)
    project(sigma_cuda_pkg)
    
    set(CMAKE_CUDA_HOST_COMPILER "/usr/bin/nvcc")
    set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-9.0)
    set(CUDA_SEPARABLE_COMPILATION ON)
    
    find_package(CUDA 9.0 REQUIRED)
    
    set(LIB_TYPE STATIC)
    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -arch=sm_61 -rdc=true -lcudart -lcudadevrt -lcuda)
    
    find_library(SIGMA_LIBRARY sigma HINTS /lib)
    
    file(GLOB SOURCES_SIGMA_C "src/*.c")
    file(GLOB SOURCES_SIGMA_CPP "src/*.cpp")
    file(GLOB SOURCES_SIGMA_CUDA "src/*.cu")
    
    
    include_directories(
    include
    /usr/local/cuda-9.0/include
    /usr/include/eigen3
    )
    
    CUDA_INCLUDE_DIRECTORIES(
    include
    /usr/local/cuda-9.0/include
    /usr/include/eigen3
    )
    
    CUDA_ADD_LIBRARY(sigma_cuda_pkg_lib  ${LIB_TYPE} ${SOURCES_SIGMA_C} ${SOURCES_SIGMA_CPP} ${SOURCES_SIGMA_CUDA})
    
    
    CUDA_COMPILE(SIGMA_MAIN_CU_O src/main.cu OPTIONS -G)
    CUDA_COMPILE(SIGMA_A_CU_O src/alpha.cu OPTIONS -G)
    CUDA_COMPILE(SIGMA_A_ERROR_CU_O src/alpha_errors.cu OPTIONS -G)
    CUDA_COMPILE(SIGMA_A_COMPARE_CU_O src/alpha_compare.cu OPTIONS -G)
    
    CUDA_ADD_EXECUTABLE(sigma_cuda_pkg_node src/main.cu ${SIGMA_A_CU_O} ${SIGMA_A_ERROR_CU_O} ${SIGMA_A_COMPARE_CU_O} OPTIONS -G)
    set_target_properties(sigma_cuda_pkg_node PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
    
    target_link_libraries(
    sigma_cuda_pkg_node 
    sigma_cuda_pkg_lib
    m
    ${CUDA_LIBRARIES} 
    )
    

    多个结果错误,格式如下:

    undefined reference to `__cudaRegisterLinkedBinary_43_tmpxft_0000081d_00000000_6_sigmaB_cpp1_ii_633f8803'
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Richard    6 年前

    在C++源文件中添加C++源文件后,在CUDA源文件中定义了函数,CUADAADADIO可执行文件现在看起来像:

    CUDA_ADD_EXECUTABLE(sigma_cuda_pkg_node src/main.cpp src/main.cu ${SOURCES_SIGMA_CUDA} OPTIONS -G)
    

    -DCMAKE_BUILD_TYPE=Release 变量)。

    项目成功构建。

    推荐文章