带有可重定位代码的CUDA编译:“在...中找不到胖子”

时间:2020-07-08 15:02:33

标签: cmake cuda nvcc

作为一个较大的CMake项目的一部分,我要添加一个CUDA库。该项目的其余部分是C ++,使用clang编译。

要测试该库是否正常运行,我正在创建一个小型可执行文件,并将CUDA库链接到它:

add_library(kernels STATIC
    kernels.cu
)
set_target_properties(kernels PROPERTIES CUDA_SEPARABLE_COMPILATION ON)

# --- Test executable
add_executable(main
    main.cpp
)
target_link_libraries(main PRIVATE kernels)

库可以正常编译,但是当调用nvcc来执行可执行文件(目标main)上设备的过程链接时,出现以下错误:

nvlink fatal   : Could not find fatbin in '[some long path]/main.cpp.o'
nvlink fatal   : elfLink internal error

是什么原因阻止了此步骤?

1 个答案:

答案 0 :(得分:1)

我无法在一个新的,很小的CMake项目中重现此问题,因此我最终发现我较大项目中的某些标志并没有发挥作用。

事实证明,在CMAKE_CXX_FLAGS中启用的Thin LTO导致了此问题。 我为此禁用了该特定目标:

target_compile_options(main PRIVATE "-fno-lto")
相关问题