2016-11-14 2 views
0

ich eine generische Fehlermeldung erhalten, wenn ich versuche catkin Build auszuführen:CUDA ROS CMake nvcc Fatal

CMake Error at robot_cuda_lib_generated_matrix.cu.o.cmake:206 (message): 
    Error generating 
    /.../catkin_ws/build/robot/CMakeFiles/robot_cuda_lib.dir/src/./robot_cuda_lib_generated_matrix.cu.o 

oder wenn ich versuche, in den Ordner selbst zu bauen:

nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified 

Ich weiß, dass die Matrix .cu-Datei funktioniert. Ich habe es aus dem CUDA-Tutorial herausgeholt, das sie machen, und es funktioniert gut, wenn ich es in ein anderes Projekt lege. Meine führende Theorie ist, dass es irgendwie Konflikte mit einem meiner anderen Pakete gibt. Oder vielleicht ist meine CMakeLists.txt irgendwo falsch. Ich habe einige Änderungen und Korrekturen ausprobiert. Dies ist die aktuelle Version:

cmake_minimum_required(VERSION 2.8.11) 
project(robot) 

find_package(catkin REQUIRED COMPONENTS 
    roscpp 
    rospy 
    std_msgs 
    pcl_ros 
) 

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}") 

find_package(OpenCV REQUIRED) 
find_package(efusion REQUIRED) 
find_package(Qt4 REQUIRED) 
find_package(Qwt REQUIRED) 
find_package(VTK 7 REQUIRED) 
find_package(CUDA REQUIRED) 

include(${QT_USE_FILE}) 
include(${VTK_USE_FILE}) 
include(FindCUDA) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

catkin_package(
# INCLUDE_DIRS include 
# LIBRARIES robot 
# CATKIN_DEPENDS roscpp rospy std_msgs 
# DEPENDS system_lib 
) 

include_directories(
    include 
    include/gplvm 
    ${catkin_INCLUDE_DIRS} 
    ${EFUSION_INCLUDE_DIR} 
    ${EIGEN_INCLUDE_DIRS} 
    # include this for ui_h 
    ${CMAKE_CURRENT_BINARY_DIR} 
    ${QWT_INCLUDE_DIR} 
    #/usr/local/cuda/include 
) 

qt4_wrap_cpp(MOC_SRCS 
    include/gplvm_plot.hpp 
    include/parameter_handler.hpp 
    include/robot.hpp 
) 

qt4_wrap_ui(UI_HDRS 
    ui/parameter_handler.ui 
    ui/robot.ui 
) 

file(GLOB robot_cuda "src/*.cu") 
file(GLOB robot_srcs "src/*.cpp" "src/kernel/*.cpp" "src/*.cu") 
file(GLOB robot_hdrs "include/*.h" "include/*.hpp" "include/kernel/*.h" "include/kernel/*.hpp") 

cuda_add_library(robot_cuda_lib ${robot_cuda} ${robot_hdrs}) 

cuda_add_executable(robot_node ${robot_srcs} ${robot_hdrs} ${MOC_SRCS} ${UI_HDRS}) 

target_link_libraries(robot_node 
    ${catkin_LIBRARIES} 
    ${OpenCV_LIBS} 
    ${EFUSION_LIBRARY} 
    ${Eigen_LIBRARIES} 
    ${QWT_LIBRARY} 
    ${QT_LIBRARIES} 
    ${VTK_LIBRARIES} 
) 

Ist es möglich, eine der anderen Pakete bricht die Build?

+1

Sie erhalten eher Hilfe, wenn Sie die ausführliche Ausgabe von Cmake bis zu dem Punkt bereitstellen, an dem der Fehler generiert wurde. Bitte fragen Sie mich nicht, wie das geht, es gibt viele Materialien im Internet, die erklären, wie man von Cmake eine ausführliche Ausgabe erhält. Mit diesen Informationen können andere das Problem im Cmake-Kompilierbefehl schneller identifizieren und zu einem bestimmten Eintrag in Ihrer Cmakelists.txt-Datei zurückverfolgen. –

+0

Cmake gibt keinen Fehler, make macht. Ich dachte nur, dass es ein Problem war, das das Cmaking stemmte. Als ich ausführliches make machte, wurde mir klar, dass es darum ging, eine Tonne Bibliotheken an die cuda-Bibliothek anzuhängen, und dachte, dass etwas darin das Problem verursachte, und es scheint so zu sein. – Shadow0144

Antwort

1

In der Tat stimmte ein Paket mit CUDA nicht überein. Ich habe den Aufruf von cuda_add_library vor den Aufruf von find_package verschoben, und es wurde ausgeführt und in Ordnung gebracht.

Verwandte Themen