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>了。