По умолчанию CUDA требует, чтобы все коды устройств были скомпилированы в одном модуле преобразования / компиляции, если вы не разрешите раздельную компиляцию / связывание кода устройства.
Но как я могу включить его в CMakeList.TXT для ROS (или в более общем случае Camke)?
Ниже мой текущий файл CMakeList:
cmake_minimum_required(VERSION 2.8.3)
project(edt)
set(ROS_BUILD_TYPE Debug)
set(CMAKE_BUILD_TYPE Debug)
# Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
FIND_PACKAGE(CUDA REQUIRED)
SET(CUDA_NVCC_FLAGS "-arch=sm_61;-g;-G" CACHE STRING "nvcc flags" FORCE)
SET (CUDA_VERBOSE_BUILD ON CACHE BOOL "nvcc verbose" FORCE)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
include_directories(
include
${catkin_INCLUDE_DIRS}
${ZED_INCLUDE_DIRS}
)
cuda_add_executable(
${PROJECT_NAME}_node
src/main.cpp
src/test.cu
src/test2.cu
)
add_dependencies(
${PROJECT_NAME}_node
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
)
## Specify libraries to link a library or executable target against
target_link_libraries(
${PROJECT_NAME}_node
${catkin_LIBRARIES}
${ZED_LIBRARIES}
)
test2.cu определяет функцию, которая вызывается в test.cu (см. cuda_add_executable в CMakeList), и в настоящее время он выдает ошибку, указав, что файл .o не может быть создан.