ROS2 Foxy环境下CMake链接CUDA::cusparse目标失败求助
ROS2 Foxy编译CMake错误排查:找不到CUDA::cusparse目标
环境与错误信息
在搭载JetPack 5.0.1的Ubuntu 20.04系统上使用ROS2 Foxy编译项目时,出现如下CMake错误:
CMake Error at CMakeLists.txt:33 (add_executable):
Target "Calibrations" links to target "CUDA::cusparse" but the target was
not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
项目CMakeLists.txt内容
cmake_minimum_required(VERSION 3.5) project(camera_models) set(CMAKE_CXX_STANDARD 14) add_compile_options(-Wextra -Wpedantic) # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(CUDA REQUIRED COMPONENTS cublas cudart cusolver cusparse) find_package(Boost REQUIRED COMPONENTS filesystem program_options system) include_directories(${Boost_INCLUDE_DIRS}) find_package(OpenCV REQUIRED) find_package(Ceres REQUIRED) include_directories(${CERES_INCLUDE_DIRS}) ament_export_include_directories(include) ament_export_libraries(camera_models) ament_export_dependencies(std_msgs) # include_directories( # ${catkin_INCLUDE_DIRS} # ) include_directories("include") add_executable(Calibrations src/intrinsic_calib.cc src/chessboard/Chessboard.cc src/calib/CameraCalibration.cc src/camera_models/Camera.cc src/camera_models/CameraFactory.cc src/camera_models/CostFunctionFactory.cc src/camera_models/PinholeCamera.cc src/camera_models/PinholeFullCamera.cc src/camera_models/CataCamera.cc src/camera_models/EquidistantCamera.cc src/camera_models/ScaramuzzaCamera.cc src/sparse_graph/Transform.cc src/gpl/gpl.cc src/gpl/EigenQuaternionParameterization.cc) # added from DEBUG ament_target_dependencies(Calibrations rclcpp std_msgs OpenCV) add_library(camera_models src/chessboard/Chessboard.cc src/calib/CameraCalibration.cc src/camera_models/Camera.cc src/camera_models/CameraFactory.cc src/camera_models/CostFunctionFactory.cc src/camera_models/PinholeCamera.cc src/camera_models/PinholeFullCamera.cc src/camera_models/CataCamera.cc src/camera_models/EquidistantCamera.cc src/camera_models/ScaramuzzaCamera.cc src/sparse_graph/Transform.cc src/gpl/gpl.cc src/gpl/EigenQuaternionParameterization.cc) target_link_libraries(Calibrations ${Boost_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES}) target_link_libraries(camera_models ${Boost_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES}) #target_link_libraries(Calibrations ${CUDA_LIBSRARIES}) #target_link_libraries(camera_models ${CUDA_LIBSRARIES}) # Install install(TARGETS Calibrations DESTINATION lib/${PROJECT_NAME} ) install(TARGETS Calibrations camera_models ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) install(TARGETS Calibrations RUNTIME DESTINATION lib/${PROJECT_NAME} ) install(DIRECTORY include/ DESTINATION include/ ) ament_package()
已尝试的操作
取消注释以下两行代码,但问题未解决:
#target_link_libraries(Calibrations ${CUDA_LIBSRARIES}) #target_link_libraries(camera_models ${CUDA_LIBSRARIES})
解决方案
1. 修正CUDA链接方式(关键)
现代CMake中,使用find_package(CUDA REQUIRED COMPONENTS ...)后,应直接链接对应的CUDA目标(而非旧版变量),同时注意原代码中的拼写错误(CUDA_LIBSRARIES应为CUDA_LIBRARIES)。修改target_link_libraries部分:
target_link_libraries(Calibrations ${Boost_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES} CUDA::cublas CUDA::cudart CUDA::cusolver CUDA::cusparse ) target_link_libraries(camera_models ${Boost_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES} CUDA::cublas CUDA::cudart CUDA::cusolver CUDA::cusparse )
2. 指定CUDA编译器路径(可选)
若CMake无法自动识别JetPack中的CUDA,可在CMakeLists开头添加:
set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
3. 验证CERES的CUDA依赖
如果CERES是基于CUDA编译的,确保其依赖被正确传递。可尝试将CERES的CUDA依赖显式添加到链接命令中,或检查CERES的CMake配置是否启用了CUDA支持。
内容的提问来源于stack exchange,提问作者Narek Poghosyan
相关产品推荐
相关产品推荐

