【QT开发】Windows 10 + Qt 5.15.2 手动编译安装 Qt OPC UA 模块完整记录

一、背景

  • 操作系统:Windows 10

  • Qt 版本:5.15.2 (MSVC 2019 64-bit)

  • 目标:使用 Qt OPC UA 模块连接 OPC UA 服务器

  • 问题:Qt 5.15.2 不自带 OPC UA 模块,需从源码编译安装

    二、整体流程

  • 下载 Qt OPC UA 源码

  • 安装依赖(OpenSSL、Perl)

  • 配置编译环境

  • 编译 Debug / Release 版本

  • 安装库文件到 Qt 目录

  • 复制后端插件

  • 注册模块至 Qt(实现 QT += opcua)

  • 验证

    三、详细步骤

    3.1 下载源码

复制代码
  git clone https://github.com/qt/qtopcua.git
  cd qtopcua
  git checkout 5.15.2
  git submodule update --init --recursive

3.2 安装 OpenSSL

Qt OPC UA 依赖 OpenSSL 1.1.1 版本(3.x 不兼容)。

  • 下载:Win64OpenSSL-1_1_1w.exe

  • 安装路径:E:\OpenSSL\OpenSSL-Win64

  • 安装时勾选 "Add to system PATH"

    3.3 安装 Perl

    编译过程需要 Perl 运行 syncqt.pl。

  • 下载:Strawberry Perl 5.32.1.1 64-bit

  • 安装路径:E:\strawberryPerl

  • 手动添加至系统环境变量 PATH:

    • E:\strawberryPerl\perl\bin

    • E:\strawberryPerl\perl\site\bin

验证

复制代码
perl -v

3.4 配置 OpenSSL 路径(重要)

编辑源码中的 src/opcua/opcua.pro,指定 OpenSSL 路径:

复制代码
OpenSSL_Path = "E:/OpenSSL/OpenSSL-Win64"
INCLUDEPATH += $$OpenSSL_Path/include
LIBS += -L$$OpenSSL_Path/lib -llibcrypto -llibssl

3.5 编译与安装

注意:Qt Creator 图形界面
  1. 打开 qtopcua.pro

  2. 选择 Release 配置(Debug 也可,但 Release 更稳定)

  3. 在 Projects → Build Environment 中添加:

    • OPENSSL_ROOT_DIR = E:/OpenSSL/OpenSSL-Win64

    • OPENSSL_INCLUDE_DIR = E:/OpenSSL/OpenSSL-Win64/include

    • OPENSSL_LIBRARY_DIR = E:/OpenSSL/OpenSSL-Win64/lib

    • PATH 追加 E:\strawberryPerl\perl\bin;E:\strawberryPerl\perl\site\bin

  4. 点击 Run qmake → Build

  5. 在 Make arguments 中输入 install,再次点击 Build (或 Build → Rebuild)

3.6 复制后端插件

即使安装成功,plugins/opcua 目录可能仍为空,需手动复制。

  • 源目录:build-qtopcua-...-Release\plugins\opcua\open62541_backend.dll

  • 目标目录:D:\Qt5.15\5.15.2\msvc2019_64\plugins\opcua\

手动创建 plugins\opcua 文件夹,复制 open62541_backend.dll。

3.7 注册模块(支持 QT += opcua)

复制模块配置文件,让 Qt 识别 opcua 模块。

  • 源目录:build-qtopcua-...-Release\mkspecs\modules\

    • qt_lib_opcua.pri

    • qt_plugin_open62541_backend.pri

  • 目标目录:D:\Qt5.15\5.15.2\msvc2019_64\mkspecs\modules\

复制后重启 Qt Creator。

3.8 验证

新建 Qt Console 项目,.pro 文件:

复制代码
QT += core opcua
CONFIG += c++17
SOURCES += main.cpp

main.cpp:

复制代码
#include <QCoreApplication>
#include <QtOpcUa/QOpcUaProvider>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QOpcUaProvider provider;
    qDebug() << "Available backends:" << provider.availableBackends();
    return 0;
}

输出应包含 ("open62541")。

四、常见错误及解决

错误现象 原因 解决方法
openssl/asn1.h: No such file or directory 缺少 OpenSSL 或路径未设置 安装 OpenSSL 1.1.1,在 .pro 中指定 INCLUDEPATH 和 LIBS,并在构建环境中添加变量
'perl' 不是内部或外部命令 未安装 Perl 或 PATH 未包含 安装 Strawberry Perl,添加至 PATH,重启 Qt Creator
Cannot run compiler 'cl' MSVC 环境未初始化 使用开始菜单中的 "Qt 5.15.2 MSVC 2019 64-bit" 命令行
Debug 可编译,Release 失败 Release 构建环境缺少 OpenSSL/Perl 路径 手动为 Release 配置添加相同的环境变量
示例程序 opcuaviewer.exe 缺失 示例未编译(不影响使用) 忽略,只关注库文件和插件
自己的项目无法 QT += opcua 缺少模块配置文件 复制 *.pri 到 mkspecs\modules 并重启 Qt Creator

五、最终确认清单

  • Qt OPC UA 库已安装至 D:\Qt5.15\5.15.2\msvc2019_64\lib\Qt5OpcUa.*

  • 后端插件 open62541_backend.dll 位于 plugins\opcua\

  • 模块配置文件 qt_lib_opcua.pri 位于 mkspecs\modules\

  • 测试项目输出 Available backends: ("open62541")


六、参考资源

相关推荐
程序员老陆14 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光14 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园15 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西16 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨16 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG16 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
优橙教育17 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
半杯咖啡半行码17 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
SEO_juper17 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
西柚小萌新17 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库