msg编译路径
一:下载源码
http://download.dre.vanderbilt.e/
目前最新版本6.1.2。如果只使用ACE,可以选择选择ACE only (tar+gzip format)。
二:编译
2.1 设置环境变量
在当前用户目录下,找到.bash_profile(centos版本)文件或.profile(ubuntu版本)文件,在该文件末尾增加内容:
export PATH
export ACE_ROOT=/home/yleesun/3rd/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:$LD_LIBRARY_PATH
具体ACE_ROOT的路径,根据实际情况修改。
2.2 执行编译命令
在$ACE_ROOT/ace目录下运行命令:
ln -s config-linux.h config.h
在$ACE_ROOT/include/makeinclude目录下执行命令:
ln -s platform_linux.GNU platform_macros.GNU
回到目录$ACE_ROOT下,执行命令:make
大概20分钟左右编译完成。
三:使用ACE编程
ACE库编译完成,下面写个程序试试。
#include <ace/Log_Msg.h>
#include <ace/OS_main.h>
using namespace std;
int ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT(“Hello World!”)));
return 0;
}
该文件命名为acetest.cpp
执行下面命令进行编译:
g++ -I$ACE_ROOT -lACE -L$ACE_ROOT/lib -o acetest acetest.cpp
编译成功,运行:
./acetest
打印出:Hello World!
注意:g++ 命令后面到参数
-I$ACE_ROOT // 指定包含到头文件路径,此处是大写的 I ,include 的第一个字母到大写。
-lACE // 指定包含到库名称,此处是小写的 l,library 的第一个字母到小写。
-L$ACE_ROOT/lib // 指定依赖库到路径,此处是大写到L,library 的第一个字母到大写。
❷ ROS入门笔记(七):详解ROS文件系统
ROS入门笔记(七):详细解析ROS文件系统
理解ROS工程的基础架构是关键。本章深入探讨了ROS的工程结构,特别是catkin编译系统、工作空间的创建与组织、package的构建以及常见文件的作用。这些内容有助于我们正确地建立和管理ROS项目。
Catkin编译系统
ROS项目采用Catkin编译系统,它是基于CMake的高效工具,用于大型项目的编译与管理。早期的rosbuild已不适用,Catkin在Groovy版本中引入,提供了简化编译、更好的可移植性和跨平台支持,如今大部分核心软件包已切换至Catkin。
工作空间结构
Catkin工作空间就像一个仓库,包含src、build和devel三个核心路径。src存放源代码,build用于编译,而devel则管理环境变量。创建和编译工作空间是ROS开发的基础步骤。
Package的组织
Package是工作空间的基本单元,包含CMakeLists.txt和package.xml等文件。CMakeLists.txt定义编译规则,而package.xml则是包的详细描述,如依赖和许可信息。
其他常见文件
- launch文件:打包并启动程序,指定参数和控制指令。
- msg/srv/action文件:自定义数据结构,用于消息、服务和动作的交互。
- urdf/xacro:描述机器人模型的物理结构。
- yaml文件:存储参数配置。
- 3D模型文件:dae/stl,用于3D模型展示。
- rviz文件:配置RViz视窗的显示设置。
掌握这些基础文件和结构,是ROS开发和调试的基础。建议初学者从Catkin系统开始学习,逐步构建和管理项目。
❸ 交叉编译时,如何链接指定路径下的库
在整个工程的configure.in文件中加入如下代码:
#configure.in
if test x$CC = xgcc; then
#AC_PATH_PROG(BLKID, blkid, [], [$PATH:/sbin])
#AC_PATH_PROG(VOLID, vol_id, [], [$PATH:/lib/udev])
AC_MSG_WARN($BLKID --------------------------------------) #code only for test
AM_CONDITIONAL(MY_CROSS_COMPILE,false)
else
#AC_PATH_PROG(BLKID, blkid, [], [/home/user-name/ltib/rootfs/sbin])
#AC_PATH_PROG(VOLID, vol_id, [], [/home/user-name/ltib/rootfs/lib])
AC_MSG_WARN($BLKID ++++++++++++++++++++++++++++++++++++++) #code only for test
AM_CONDITIONAL(MY_CROSS_COMPILE,true)
fi
在需要blkid库的Makefile.am文件中
if MY_CROSS_COMPILE
AM_CPPFLAGS = -include $(top_builddir)/config.h -I ../include \
-DLOCALEDIR=\"$(localedir)\" -I /home/user-name/ltib/rootfs/usr/include
AM_CFLAGS = -fsigned-char -I /home/user-name/ltib/rootfs/usr/include
else
AM_CPPFLAGS = -include $(top_builddir)/config.h -I ../include \
-DLOCALEDIR=\"$(localedir)\"
AM_CFLAGS = -fsigned-char
endif
lib_mount_la_LIBADD = $(LDADD_common)
LDADD_common =
if MY_CROSS_COMPILE
LDADD_common += -L$(LTIB_PATH)/rootfs/usr/lib -lblkid -luuid
else
LDADD_common += -lblkid -luuid
endif
❹ Ros中msg创建.h的问题
自己测试结果如下,当你按照wiki教程写好cmakelist.txt之后,第一次catkin_make会生成Num.h。之后就可以 #include <pkg_name/Num.h>了。