"undefined reference to" 罗斯 CPP 问题库



问题:我可能有ROS Cpp库问题。我的cpp没有链接到我的一些hpp内容。当它只是cpp时,它有效,当我添加ros时,它不再有效。我自己不是很流利,我该怎么办才能解决这个问题?

错误

/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材料
  • src
    • 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-cpp包调整为Ros。所以我知道hpp和cpp是正确编写的。我想我遇到了hpp/cpp库链接问题。

我似乎找不到一个在线的解决方案。我也尝试了很多CmakeFile的改编,但没有成功。

我应该找什么?

谢谢大家!

EDit

如果代码cpp根本不起作用,但没有ROS的代码可以完美工作,则此链接是相关的。因此,在进行Ros集成时出现了问题。

从技术上讲,这是一个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
)

有关详细信息,请参阅此wiki页面。

最新更新