编译报找不到某定义:
先#include <packagename/headfilename.h>.如果cmakelist和package.xml正确的话,单独编译这个包,会在ws/devel/include下生成对应的头文件.
转:自定义第一个消息类型my_point
1、建立自定义消息类型package
cd ~/catkin_ws/src/
catkin_creat_pkg new_msg
cd new_msg/
mkdir msg
2、输入消息格式到消息文件
echo "float64 a" >> msg/my_point.msg
echo "float64 b" >> msg/my_point.msg
echo "float64 c" >> msg/my_point.msg
3 在new_msg的CMakeLists.txt文件中添加如下语句
find_package(catkin REQUIRED COMPONENTS message_generation roscpp std_msgs)
4 取消 add_message_files 的相关注释,并添加为如下:
add_message_files(FILES my_point.msg )
5 取消generate_messages的相关注释,并添加修改为如下:
generate_messages(DEPENDENCIES std_msgs )
6 在catkin_package中添加:CATKIN_DEPENDS message_runtime
7 在new_msg的.xml文件中添加:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
8 cd ~/catkin_ws/ && catkin_make -DCATKIN_WHITELIST_PACKAGES="new_msg"
如果缺少头文件(转):
出现此错误时,有三种可能情况:1. 此.h文件是由自定义消息生成的,如robot_msgs/voltage.msg
则解决方法是cmakeList中添加:
add_executable(robot_control_node src/robot_control.cpp )
add_dependencies(robot_control_node robot_msgs_gencpp)
target_link_libraries(robot_control_node ${catkin_LIBRARIES})
其中:robot_control_node是所要生成的可执行文件,add_dependencies添加所需依赖。
请记得,在find_package中添加robot_msgs。
其次,请记得在package.xml中添加
<build_depend>robot_msgs</build_depend>
<run_depend>robot_msgs</run_depend>
2. 此.h文件位于本包include内:
解决方法是,在包含目录下包含include包:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
3. 此.h文件位于别的包内,如robot_navigation:
则在find_package中添加此包名:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
robot_navigation
)
其次,请记得在package.xml中添加
<build_depend>robot_navigation</build_depend>
<run_depend>robot_navigation</run_depend>