使用可重定位代码的 CUDA 编译:"Could not find fatbin in ..."
CUDA compilation with relocatable code: "Could not find fatbin in ..."
作为更大的 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
是什么阻止了这一步的工作?
我无法在一个新的小型 CMake 项目中重现这个问题,所以我最终发现我的较大项目中的某些标志没有发挥作用。
事实证明,在 CMAKE_CXX_FLAGS
中启用的精简 LTO 导致了此问题。
我为这个特定目标禁用了它:
target_compile_options(main PRIVATE "-fno-lto")
作为更大的 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
是什么阻止了这一步的工作?
我无法在一个新的小型 CMake 项目中重现这个问题,所以我最终发现我的较大项目中的某些标志没有发挥作用。
事实证明,在 CMAKE_CXX_FLAGS
中启用的精简 LTO 导致了此问题。
我为这个特定目标禁用了它:
target_compile_options(main PRIVATE "-fno-lto")