我的catkin_make
以某种方式成功执行,但run_test失败。我已经确认我已将测试脚本和代码作为可执行文件添加到CMakeList.txt中,并使用target_link_libraries
进行了链接。但是,在运行Catkin_make run_tests
时,我总是收到错误消息:
undefined reference to `VisualRobot::VisualRobot(std::shared_ptr<moveit::core::RobotModel>)'
这是我的测试代码:
#include <iostream>
#include <moveit_visual_tools/moveit_visual_tools.h>
#include <visualization_msgs/Marker.h>
#include <eigen_conversions/eigen_msg.h>
#include <tf/transform_datatypes.h>
#include <cmath>
#include "gtest/gtest.h"
#include "visual_robot.h"
class Checksweep : public testing::Test{
public:
virtual void SetUp() {
// ...
robot_model_loader::RobotModelLoader robot_model_loader("robot_description");
robot_model::RobotModelPtr kinematic_model = robot_model_loader.getModel();
visual = new VisualRobot(kinematic_model);
}
virtual void TearDown() { delete visual; }
VisualRobot * visual;
ros::NodeHandle nh;
};
TEST_F(Checksweep, TestnJoint)
{
EXPECT_GT(visual->nJoints, 0); //nJoints is a public variable in VisualRobot class.
}
int main(int argc, char **argv){
testing::InitGoogleTest(&argc, argv);
ros::init(argc, argv, "my_testnode");
return RUN_ALL_TESTS();
}
还有我的visual_robot.h:
#ifndef _VISUAL_ROBOT
#define _VISUAL_ROBOT
class VisualRobot{
public:
VisualRobot( robot_model::RobotModelPtr kinematic_model);
void make_function();
robot_model::RobotModelPtr kinematic_model;
int nJoints;
private:
ros::NodeHandle nh;
ros::Publisher marker_pub;
};
#endif
根据我的理解,我认为我已经在测试代码的VisualRobot * visual
行中定义了Visual Robot的实例
编辑1:同样,该错误似乎发生在我的测试代码行中:
visual = new VisualRobot(kinematic_model);
编辑2:添加了我的CMakeList.txt的一部分:
add_executable(visual_robot src/visual_robot.cpp)
target_link_libraries(visual_robot ${catkin_LIBRARIES} ${Boost_LIBRARIES})
if(CATKIN_ENABLE_TESTING)
find_package(rostest REQUIRED)
add_rostest_gtest(visual_testnode launch/visual.launch src/visual_test.cpp )
target_link_libraries(visual_testnode ${catkin_LIBRARIES} )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 --coverage")
endif()
答案 0 :(得分:0)
我已经解决了这个问题。答案的来源在这里: enter link description here
基本上,在我的CMakerList.txt中,我需要add_library(visual_robot src/visual_robot.cpp)
并使用target_link_libraries(visual_testnode visual_robot ${catkin_LIBRARIES})