window11 qt5.14.1 msvc2017 编译OpenDDS-3.33.0 完整编译指南
本文详细记录了在 Windows 系统下使用 Visual Studio 2017 编译 OpenDDS 3.33.0 的完整过程,包括 Release 和 Debug 两种版本的编译,以及环境配置和 Qt 项目集成。
📋 目录
- 一、环境准备
- [1.1 系统要求](#1.1 系统要求)
- [1.2 安装 Strawberry Perl](#1.2 安装 Strawberry Perl)
- [二、下载 OpenDDS](#二、下载 OpenDDS)
- [2.1 下载源码](#2.1 下载源码)
- [2.2 解压](#2.2 解压)
- [三、编译 OpenDDS](#三、编译 OpenDDS)
- [3.1 打开编译环境](#3.1 打开编译环境)
- [3.2 进入 OpenDDS 目录](#3.2 进入 OpenDDS 目录)
- [3.3 配置 OpenDDS](#3.3 配置 OpenDDS)
- [3.4 编译 Release 版本](#3.4 编译 Release 版本)
- [3.5 编译 Debug 版本](#3.5 编译 Debug 版本)
- [3.6 验证编译结果](#3.6 验证编译结果)
- 四、设置环境变量
- [4.1 永久环境变量](#4.1 永久环境变量)
- [4.2 验证环境变量](#4.2 验证环境变量)
- 五、编译结果目录结构
- 六、快速编译命令汇总
- [6.1 完整编译(推荐)](#6.1 完整编译(推荐))
- [6.2 分步编译(只编译核心库)](#6.2 分步编译(只编译核心库))
- 七、编译时间参考
- 八、常见问题及解决
- [8.1 Perl 找不到](#8.1 Perl 找不到)
- [8.2 Windows SDK 版本不匹配](#8.2 Windows SDK 版本不匹配)
- [8.3 缺少 TAOd.lib](#8.3 缺少 TAOd.lib)
- [8.4 msbuild 找不到](#8.4 msbuild 找不到)
- [8.5 编码警告 C4819](#8.5 编码警告 C4819)
- 九、验证安装
- [9.1 检查库文件](#9.1 检查库文件)
- [9.2 检查工具](#9.2 检查工具)
- [9.3 启动信息仓库服务测试](#9.3 启动信息仓库服务测试)
- [十、Qt 项目配置模板](#十、Qt 项目配置模板)
- [10.1 .pro 文件(同时支持 Debug/Release)](#10.1 .pro 文件(同时支持 Debug/Release))
- 十一、编译完成检查清单
- 十二、文件清单
- [12.1 核心编译产物](#12.1 核心编译产物)
- [12.2 可选传输库](#12.2 可选传输库)
- 十三、总结
一、环境准备
1.1 系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 / 11 |
| 编译器 | Visual Studio 2017 (MSVC 14.1) |
| 目标平台 | x64 |
| 构建模式 | Release + Debug |
1.2 安装 Strawberry Perl
用途:OpenDDS 编译脚本需要 Perl 环境
下载地址 :https://strawberryperl.com/
推荐版本 :strawberry-perl-5.32.1.1-64bit.msi
安装步骤:
- 双击安装包
- 使用默认路径
C:\Strawberry - 必须勾选
Add Perl to the PATH environment variable - 完成安装
验证安装:
cmd
perl --version
预期输出:
This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread
二、下载 OpenDDS
2.1 下载源码
- 下载地址 :https://opendds.org/downloads.html
- 文件名 :
OpenDDS-3.33.0.zip
2.2 解压
解压到:D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0
💡 提示:路径中不要包含空格或中文字符,避免编译时出现问题。
三、编译 OpenDDS
3.1 打开编译环境
方法一:直接打开 x64 命令提示符
- 开始菜单 → x64 Native Tools Command Prompt for VS 2017
方法二:从 x86 切换到 x64
cmd
# 如果只有 x86,执行以下命令切换
"D:\WorkApp\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
# 验证编译器
cl
预期输出:
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.16.27054 版
3.2 进入 OpenDDS 目录
cmd
D:
cd D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0
3.3 配置 OpenDDS
cmd
configure
配置过程:
- 自动检测 MSVC 2017 编译器
- 自动下载 ACE+TAO 源码(约 31 MB)
- 生成
DDS_TAOv2.sln解决方案文件
成功标志:
Configuration complete. Generated DDS_TAOv2.sln
3.4 编译 Release 版本
cmd
# 编译完整解决方案
msbuild /m /p:Configuration=Release /p:Platform=x64 DDS_TAOv2.sln
参数说明:
/m:多核并行编译/p:Configuration=Release:Release 模式/p:Platform=x64:64 位平台
编译时间:20-40 分钟
生成文件 (在 lib 目录):
ACE.lib/ACE.dllTAO.lib/TAO.dllOpenDDS_Dcps.lib/.dllOpenDDS_Rtps.lib/.dll- 其他传输库...
3.5 编译 Debug 版本
cmd
# 编译完整解决方案 Debug 版本
msbuild /m /p:Configuration=Debug /p:Platform=x64 DDS_TAOv2.sln
编译时间:20-40 分钟
生成文件 (带 d 后缀):
ACEd.lib/ACEd.dllTAOd.lib/TAOd.dllOpenDDS_Dcpsd.lib/.dllOpenDDS_Rtpsd.lib/.dll- 其他 Debug 库...
3.6 验证编译结果
cmd
# 查看所有库文件
dir lib\*.lib
# 查看 Debug 库文件
dir lib\*d.lib
# 查看工具
dir bin\*.exe
# 查看 Debug 工具
dir bin\*d.exe
四、设置环境变量
4.1 永久环境变量
- 右键 此电脑 → 属性 → 高级系统设置 → 环境变量
- 在 系统变量 中新建:
| 变量名 | 变量值 |
|---|---|
DDS_ROOT |
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0 |
ACE_ROOT |
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\ACE_wrappers |
- 编辑
Path变量,添加:%DDS_ROOT%\bin%ACE_ROOT%\bin
4.2 验证环境变量
cmd
echo %DDS_ROOT%
echo %ACE_ROOT%
opendds_idl --version
预期输出:
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\ACE_wrappers
OpenDDS IDL Compiler version 3.33.0
五、编译结果目录结构
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\
│
├── lib\ # 库文件目录
│ ├── ACE.lib # Release 静态库
│ ├── ACE.dll # Release 动态库
│ ├── ACEd.lib # Debug 静态库
│ ├── ACEd.dll # Debug 动态库
│ ├── TAO.lib / TAO.dll # Release TAO
│ ├── TAOd.lib / TAOd.dll # Debug TAO
│ ├── OpenDDS_Dcps.lib / .dll # Release DDS 核心
│ ├── OpenDDS_Dcpsd.lib / .dll # Debug DDS 核心
│ ├── OpenDDS_Rtps.lib / .dll # Release RTPS
│ ├── OpenDDS_Rtpsd.lib / .dll # Debug RTPS
│ ├── OpenDDS_Util.lib / .dll # Release 工具库
│ ├── OpenDDS_Utild.lib / .dll # Debug 工具库
│ └── ... # 其他传输库
│
├── bin\ # 可执行文件
│ ├── opendds_idl.exe # Release IDL 编译器
│ ├── opendds_idld.exe # Debug IDL 编译器
│ ├── DCPSInfoRepo.exe # Release 信息仓库服务
│ ├── DCPSInfoRepod.exe # Debug 信息仓库服务
│ └── ...
│
├── ace_wrappers\ # ACE+TAO 源码
│ └── lib\
│ ├── ACE.lib / ACEd.lib
│ └── TAO.lib / TAOd.lib
│
└── dds\ # DDS 源码
六、快速编译命令汇总
6.1 完整编译(推荐)
cmd
# 进入目录
cd D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0
# 编译 Release
msbuild /m /p:Configuration=Release /p:Platform=x64 DDS_TAOv2.sln
# 编译 Debug
msbuild /m /p:Configuration=Debug /p:Platform=x64 DDS_TAOv2.sln
6.2 分步编译(只编译核心库)
cmd
cd D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0
# 1. 编译 ACE
cd ace_wrappers\ace
msbuild /m /p:Configuration=Release /p:Platform=x64 ACE.vcxproj
msbuild /m /p:Configuration=Debug /p:Platform=x64 ACE.vcxproj
# 2. 编译 TAO
cd ..\TAO
msbuild /m /p:Configuration=Release /p:Platform=x64 TAO.vcxproj
msbuild /m /p:Configuration=Debug /p:Platform=x64 TAO.vcxproj
# 3. 编译 OpenDDS 核心
cd ..\..\DDS
msbuild /m /p:Configuration=Release /p:Platform=x64 OpenDDS_Dcps.vcxproj
msbuild /m /p:Configuration=Debug /p:Platform=x64 OpenDDS_Dcps.vcxproj
msbuild /m /p:Configuration=Release /p:Platform=x64 OpenDDS_Rtps.vcxproj
msbuild /m /p:Configuration=Debug /p:Platform=x64 OpenDDS_Rtps.vcxproj
# 4. 编译 IDL 编译器
cd ..\tools\opendds_idl
msbuild /m /p:Configuration=Release /p:Platform=x64 opendds_idl.vcxproj
msbuild /m /p:Configuration=Debug /p:Platform=x64 opendds_idl.vcxproj
七、编译时间参考
| 编译方式 | 编译内容 | 预计时间 |
|---|---|---|
| 核心库分步 | ACE + TAO + DDS核心 | 10-15 分钟 |
| 完整 Release | 所有组件 + 示例 | 20-30 分钟 |
| 完整 Debug | 所有组件 + 示例 | 20-30 分钟 |
| 完整两种模式 | Release + Debug | 40-60 分钟 |
八、常见问题及解决
8.1 Perl 找不到
错误信息:
ERROR: perl.exe was not found
解决方案:
- 安装 Strawberry Perl
- 确保勾选 "Add Perl to PATH"
- 或手动添加
C:\Strawberry\perl\bin到 PATH
8.2 Windows SDK 版本不匹配
错误信息:
error MSB8036: 找不到 Windows SDK 版本10.0.17763.0
解决方案:
- 方案A:安装对应 SDK 版本
- 方案B:使用 Visual Studio 重定解决方案目标
- 方案C:只编译核心库(不编译示例)
8.3 缺少 TAOd.lib
错误信息:
fatal error LNK1104: 无法打开文件"TAOd.lib"
解决方案:先编译 TAO Debug 版本
cmd
cd ace_wrappers\TAO
msbuild /m /p:Configuration=Debug /p:Platform=x64 TAO.vcxproj
8.4 msbuild 找不到
解决方案:使用完整路径
cmd
"D:\WorkApp\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe" /m /p:Configuration=Release /p:Platform=x64 DDS_TAOv2.sln
8.5 编码警告 C4819
警告信息:
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符
说明:不影响使用,可以忽略
解决方案 :在 .pro 中添加 /wd4819
九、验证安装
9.1 检查库文件
cmd
dir D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\lib\*.lib
9.2 检查工具
cmd
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\bin\opendds_idl --version
9.3 启动信息仓库服务测试
cmd
D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\bin\DCPSInfoRepo.exe --help
十、Qt 项目配置模板
10.1 .pro 文件(同时支持 Debug/Release)
qmake
# OpenDDSProject.pro
TEMPLATE = app
TARGET = OpenDDSDemo
CONFIG += c++11 console
CONFIG -= app_bundle
# OpenDDS 路径(根据实际安装路径修改)
DDS_ROOT = D:/Qt_APPsource/Qt_OpenDDS/OpenDDS-3.33.0
ACE_ROOT = $$DDS_ROOT/ACE_wrappers
# 包含目录
INCLUDEPATH += $$DDS_ROOT \
$$ACE_ROOT \
$$DDS_ROOT/dds/DCPS \
$$ACE_ROOT/ace
# 库目录
LIBS += -L$$DDS_ROOT/lib \
-L$$ACE_ROOT/lib
# 根据构建模式选择库
CONFIG(debug, debug|release) {
# Debug 模式:使用带 d 后缀的库
LIBS += -lOpenDDS_Dcpsd \
-lOpenDDS_Rtpsd \
-lOpenDDS_Utild \
-lOpenDDS_Tcpd \
-lTAOd \
-lACEd
TARGET = $$join(TARGET,,,d)
} else {
# Release 模式:使用不带后缀的库
LIBS += -lOpenDDS_Dcps \
-lOpenDDS_Rtps \
-lOpenDDS_Util \
-lOpenDDS_Tcp \
-lTAO \
-lACE
}
# 公共预处理器定义
DEFINES += ACE_AS_STATIC_LIBS \
ACE_HAS_STANDARD_CPP_LIBRARY=1 \
__ACE_INLINE__
# 忽略编码警告
QMAKE_CXXFLAGS += /wd4819
# 启用多核编译
QMAKE_CXXFLAGS += /MP
# 源文件
SOURCES += main.cpp
# 如果有 IDL 生成的文件,添加到这里
# SOURCES += MessengerTypeSupportC.cpp
# HEADERS += MessengerTypeSupportC.h
十一、编译完成检查清单
- Strawberry Perl 已安装并添加到 PATH
- VS2017 x64 命令行可用
- OpenDDS 源码已解压
-
configure执行成功 - Release 版本编译成功
- Debug 版本编译成功
-
opendds_idl.exe可用 -
DCPSInfoRepo.exe可用 - 环境变量
DDS_ROOT和ACE_ROOT已设置 -
%DDS_ROOT%\bin已添加到 PATH - Qt 项目配置正确
十二、文件清单
12.1 核心编译产物
| 类型 | Release | Debug |
|---|---|---|
| ACE 库 | ACE.lib / ACE.dll |
ACEd.lib / ACEd.dll |
| TAO 库 | TAO.lib / TAO.dll |
TAOd.lib / TAOd.dll |
| DDS 核心 | OpenDDS_Dcps.lib / .dll |
OpenDDS_Dcpsd.lib / .dll |
| RTPS 传输 | OpenDDS_Rtps.lib / .dll |
OpenDDS_Rtpsd.lib / .dll |
| 工具库 | OpenDDS_Util.lib / .dll |
OpenDDS_Utild.lib / .dll |
| IDL 编译器 | opendds_idl.exe |
opendds_idld.exe |
| 信息仓库 | DCPSInfoRepo.exe |
DCPSInfoRepod.exe |
12.2 可选传输库
| 传输类型 | Release | Debug |
|---|---|---|
| TCP 传输 | OpenDDS_Tcp.lib / .dll |
OpenDDS_Tcpd.lib / .dll |
| UDP 传输 | OpenDDS_Udp.lib / .dll |
OpenDDS_Udpd.lib / .dll |
| 组播传输 | OpenDDS_Multicast.lib / .dll |
OpenDDS_Multicastd.lib / .dll |
| 共享内存 | OpenDDS_Shmem.lib / .dll |
OpenDDS_Shmemd.lib / .dll |
十三、总结
本文详细记录了 OpenDDS 3.33.0 在 Windows 环境下使用 Visual Studio 2017 的完整编译过程,包括:
✅ 环境准备 :Strawberry Perl 安装
✅ 源码下载 :OpenDDS 3.33.0
✅ 编译配置 :Release 和 Debug 两种模式
✅ 环境配置 :系统环境变量设置
✅ Qt 集成 :.pro 文件配置模板
✅ 问题解决:常见编译错误及解决方案
编译成功后,你就可以在 Qt 项目中使用 OpenDDS 开发 DDS 应用程序了。
如需了解更多 OpenDDS 的使用方法,请参考:
📝 笔记说明:本文档基于实际编译过程整理,适用于 Windows 10/11 + VS2017 + OpenDDS 3.33.0 环境。如果你的环境不同,请相应调整路径和版本号。