1. 搭建OpenDDS开发环境

搭建OpenDDS开发环境 学习卡片

任务目标

在Linux和Windows两个平台上完成OpenDDS开发环境的搭建,包括安装依赖、编译OpenDDS、配置环境变量,并通过编译并运行一个最小发布/订阅示例来验证环境可用。

环境依赖

  • Linux (Ubuntu 22.04+):g++、make、perl、libssl-dev
  • Windows (10/11):Visual Studio 2022(含C++桌面开发组件)、Perl(Strawberry Perl或ActivePerl)
  • ACE/TAO:OpenDDS依赖的底层中间件,需先编译

安装步骤

Linux安装

# 安装系统依赖
sudo apt update
sudo apt install -y g++ make perl libssl-dev

# 下载并解压(以OpenDDS 3.28为例)
wget https://github.com/objectcomputing/OpenDDS/archive/refs/tags/DDS-3.28.tar.gz
tar xzf DDS-3.28.tar.gz
cd OpenDDS-DDS-3.28

# 配置并编译(自动下载并编译ACE/TAO)
./configure
make -j$(nproc)

Windows安装

# 以管理员身份打开“x64 Native Tools Command Prompt for VS 2022”
# 下载OpenDDS源码并解压,然后进入目录

# 配置(自动获取并编译ACE/TAO)
configure.cmd

# 编译
msbuild OpenDDS.sln /p:Configuration=Release /p:Platform=x64 /m

环境变量配置

编译完成后,将以下路径加入环境变量(Linux写入~/.bashrc,Windows通过系统属性设置):

# Linux
export DDS_ROOT=/path/to/OpenDDS-DDS-3.28
export ACE_ROOT=$DDS_ROOT/ACE
export TAO_ROOT=$DDS_ROOT/TAO
export PATH=$DDS_ROOT/bin:$ACE_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$DDS_ROOT/lib:$ACE_ROOT/lib:$LD_LIBRARY_PATH

# Windows(在系统环境变量中添加)
DDS_ROOT=C:\path\to\OpenDDS-DDS-3.28
ACE_ROOT=%DDS_ROOT%\ACE
TAO_ROOT=%DDS_ROOT%\TAO
PATH=%DDS_ROOT%\bin;%ACE_ROOT%\bin;%PATH%

验证编译与运行

使用OpenDDS自带的Messenger示例验证环境。该示例位于$DDS_ROOT/examples/Messenger。

编译示例

# Linux
cd $DDS_ROOT/examples/Messenger
make

# Windows
cd %DDS_ROOT%\examples\Messenger
msbuild Messenger.sln /p:Configuration=Release /p:Platform=x64

运行验证

打开两个终端(或两个命令提示符窗口)。终端1运行订阅端,终端2运行发布端:

# 终端1 - 订阅端
cd $DDS_ROOT/examples/Messenger
./subscriber

# 终端2 - 发布端
cd $DDS_ROOT/examples/Messenger
./publisher

发布端运行后,订阅端控制台应持续输出类似以下内容(预期输出,非实测结果):

Subscriber received message: Hello World! 1
Subscriber received message: Hello World! 2
Subscriber received message: Hello World! 3
...

通过判定标准

  • 编译过程无错误,生成publisher和subscriber可执行文件;
  • 发布端运行后正常退出(默认发送10条消息),订阅端收到全部10条消息并打印;
  • 两个进程均无崩溃、无DDS内部错误日志。

常见问题

  • Linux编译报错找不到libssl:确认已安装libssl-dev,并重新运行./configure。
  • Windows下configure.cmd失败:确认已安装Perl并加入PATH,且使用VS2022的x64原生命令行工具。
  • 运行时提示找不到libOpenDDS.so/OpenDDS.dll:检查LD_LIBRARY_PATH(Linux)或PATH(Windows)是否包含$DDS_ROOT/lib。