【问题标题】:"undefined reference to" Ros Cpp problem library“未定义引用”Ros Cpp 问题库
【发布时间】:2021-11-03 20:11:59
【问题描述】:

问题:我可能遇到了 ROS Cpp 库问题。我的 cpp 没有链接到我的一些 hpp 内容。当它只是cpp时,它可以工作,当我添加ros时,它不再起作用了。我自己的 cpp 不流利,我应该怎么做才能解决这个问题?

错误

 /usr/bin/ld: CMakeFiles/node.dir/src/main.cpp.o: in function `main':
    main.cpp:(.text+0x244): undefined reference to `A::A(int, char**)'
    /usr/bin/ld: main.cpp:(.text+0x258): undefined reference to `A::~A()'
    collect2: error: ld returned 1 exit status

包配置:我使用的是 Ros noetic

-->Ros_package

  • 包括
    • A.hpp
    • 所有 h 和 hpp 的东西
    • main.cpp
    • 所有 c 和 cpp 的东西

A.hpp 内容

#ifndef A_HPP
#define A_HPP


/*** I N C L U D E S **********************************************************/
#include QT/ another .hpp, another .h


/* D E F I N E S ************************************************************/
/* Debug helper */

/* S T R U C T U R E **********************************************************/
typedef struct stuff


/*** C L A S S ****************************************************************/
class A : public QThread
{
  Q_OBJECT

  public:
    A (int argc, char** argv);
    virtual ~A (void);
    void run (void);

  private:
    method

  public slots:
    method

  private:
    stuff
};

#endif // A_HPP

Main.cpp 内容:

/* I N C L U D E S ************************************************************/
#include <QApplication>
#include <ros/ros.h>
#include <A.hpp>

/* M A I N ********************************************************************/
int main (int argc, char** argv)
{
  QApplication app(argc, argv);

  /* Launch main thread */
  ros::init(argc, argv, "test_dammit");

  A mainThread (argc, argv); 
  /*stuff

  return 0;
}

Cmakefile 内容:

cmake_minimum_required(VERSION 3.0.2)
project(ros_package)

catkin_package()

find_package(catkin REQUIRED roscpp)

## System dependencies are found with CMake's conventions
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Network REQUIRED)

include_directories(
 include
 ${catkin_INCLUDE_DIRS}
 ${PROJECT_SOURCE_DIR}/include
)  

add_executable(node src/main.cpp )

## Specify libraries to link a library or executable target against
target_link_libraries(node
   ${catkin_LIBRARIES} Qt5::Widgets Qt5::Network
)

上下文:我正在为 Ros 改编一个非 Ros cpp 包。所以我知道 hpp 和 cpp 是正确编写的。我想我遇到了 hpp/cpp 库链接问题。

我似乎找不到可以在线使用的解决方案。我也尝试了很多 CmakeFile 改编,没有运气。

我应该寻找什么?

谢谢大家!

编辑

这个Link 是相关的,如果代码 cpp 根本不工作但没有 ROS 的代码工作完美。所以在做Ros集成的时候就出现了问题。

【问题讨论】:

    标签: c++ ros


    【解决方案1】:

    这在技术上是CMakecatkin 的问题,而不是专门的ros。对于 catkin 包,您必须调用 catkin_package() 来生成特定于 catkin 的构建信息。这也必须在add_libraryadd_executable 之前调用

    cmake_minimum_required(VERSION 3.0.2)
    project(ros_package)
    
    catkin_package()
    
    find_package(catkin REQUIRED roscpp)
    
    ## System dependencies are found with CMake's conventions
    find_package(Qt5Widgets REQUIRED)
    find_package(Qt5Network REQUIRED)
    
    include_directories(
     include
     ${catkin_INCLUDE_DIRS}
     ${PROJECT_SOURCE_DIR}/include
    )  
    
    add_executable(node src/main.cpp )
    
    ## Specify libraries to link a library or executable target against
    target_link_libraries(node
       ${catkin_LIBRARIES} Qt5::Widgets Qt5::Network
    )
    

    欲了解更多信息,请参阅this wiki page

    【讨论】:

    • BTables,谢谢,但是我在写问题时错误地删除了行:/
    • 抱歉这个错误
    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2021-05-17
    • 2019-09-14
    • 2013-02-10
    • 2022-01-16
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多