window11 qt5.14.1 msvc2017 编译OpenDDS-3.33.0

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

安装步骤

  1. 双击安装包
  2. 使用默认路径 C:\Strawberry
  3. 必须勾选 Add Perl to the PATH environment variable
  4. 完成安装

验证安装

cmd 复制代码
perl --version

预期输出

复制代码
This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread

二、下载 OpenDDS

2.1 下载源码

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.dll
  • TAO.lib / TAO.dll
  • OpenDDS_Dcps.lib / .dll
  • OpenDDS_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.dll
  • TAOd.lib / TAOd.dll
  • OpenDDS_Dcpsd.lib / .dll
  • OpenDDS_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 永久环境变量

  1. 右键 此电脑属性高级系统设置环境变量
  2. 系统变量 中新建:
变量名 变量值
DDS_ROOT D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0
ACE_ROOT D:\Qt_APPsource\Qt_OpenDDS\OpenDDS-3.33.0\ACE_wrappers
  1. 编辑 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_ROOTACE_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 环境。如果你的环境不同,请相应调整路径和版本号。

相关推荐
爱吃生蚝的于勒2 小时前
【Linux】网络之http协议
linux·运维·服务器·网络·数据结构·c++·http
2501_945424802 小时前
高性能计算资源调度
开发语言·c++·算法
fakerth2 小时前
【Linux】调度器底层原理深入探索
linux·c++·操作系统
TTTrees2 小时前
C++学习笔记(33):智能指针(工厂函数)
c++
2301_776508722 小时前
C++中的组合模式变体
开发语言·c++·算法
历程里程碑2 小时前
44. TCP -23Linux聊天室实现命令符功能
java·linux·开发语言·数据结构·c++·排序算法·tcp
2301_793804692 小时前
模板代码安全性增强
开发语言·c++·算法
干啥啥不行,秃头第一名2 小时前
C++中的观察者模式
开发语言·c++·算法
羊小猪~~2 小时前
算法/力扣--数组典型题目
c语言·c++·python·算法·leetcode·职场和发展·求职招聘