作为一个较大的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
是什么原因阻止了此步骤?
答案 0 :(得分:1)
我无法在一个新的,很小的CMake项目中重现此问题,因此我最终发现我较大项目中的某些标志并没有发挥作用。
事实证明,在CMAKE_CXX_FLAGS
中启用的Thin LTO导致了此问题。
我为此禁用了该特定目标:
target_compile_options(main PRIVATE "-fno-lto")