OpenDDS是跨平台的中间件,支持多种操作系统,包括windows,Vxworks,qnx,安卓,linux等。
本文即记录如何将OpenDDS库交叉编译到arm-linux平台以及如何把基于opendds的应用程序移植到arm-linux平台上。
OpenDDS库文件的交叉编译
- 环境准备
交叉编译Host: Ubuntu 18.04,需要安装cmake, perl, make等工具
OpenDDS:最新版本即可
arm-linux交叉编译器:安装交叉编译器到/opt下面,注意交叉编译器的g++,lib库等一定要完备。 - 交叉编译过程
a. 进入到OpenDDS-“version”路径
b. 执行./configure --target=linux-cross --target-compiler=/opt/cross-compiler/bin/arm-linux-xxx-g++
(这个命令是指定编译类型为交叉编译,相应的交叉编译器路径在哪里)
c. 执行完毕后,在OpenDDS-version/build目录下面会分别有两个子文件夹,host指的是用来编译的主机即ubuntu系统,target是指交叉编译的目标机,即arm-linux。他是把Opendds的源代码工程(包括ace,tao,各种应用在)target和host子文件夹下面分别拷贝一份。
d. 在OpenDDS-“version”路径下,执行make,在target路径下,能找到编译成功的libDCPS.so即说明交叉编译成功。
(可以看到除了libDCPS,还有其他的库文件libACE,libTAO等也在target路径下面存在,而host和openDDS root目录下面,没有任何的编译好的动态库文件) - 执行验证
a. 打包OpenDDS-“version”路径,并通过scp方式拷贝到arm-linux嵌入式板子上。
b. 解压缩包,进入到OpenDDS-“version”,并设置以下环境变量
(通过这里可以看出,在arm-linux环境中, OpenDDS的整个工程其实都是指向target下面的OpenDDS)
export DDS_ROOT="$PWD/build/target"
export ACE_ROOT="$DDS_ROOT/ACE_wrappers"
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:"$ACE_ROOT/lib":"$DDS_ROOT/lib"
export PATH=${PATH}:"$ACE_ROOT/bin":"$DDS_ROOT/bin"
进入$DDS_ROOT/DevGuideExamples/DCPS/Messenger,运行样例程序即可,如果运行成功,即说明编译运行移植成功。