一、背景
操作系统: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 --recursive3.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\binE:\strawberryPerl\perl\site\bin
验证
perl -v3.4 配置 OpenSSL 路径(重要)
编辑源码中的src/opcua/opcua.pro,指定 OpenSSL 路径:
OpenSSL_Path = "E:/OpenSSL/OpenSSL-Win64" INCLUDEPATH += $$OpenSSL_Path/include LIBS += -L$$OpenSSL_Path/lib -llibcrypto -llibssl3.5 编译与安装
注意:Qt Creator 图形界面
打开
qtopcua.pro选择Release配置(Debug 也可,但 Release 更稳定)
在Projects → Build Environment中添加:
OPENSSL_ROOT_DIR = E:/OpenSSL/OpenSSL-Win64OPENSSL_INCLUDE_DIR = E:/OpenSSL/OpenSSL-Win64/includeOPENSSL_LIBRARY_DIR = E:/OpenSSL/OpenSSL-Win64/libPATH追加E:\strawberryPerl\perl\bin;E:\strawberryPerl\perl\site\bin
点击Run qmake→Build
在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.priqt_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.cppmain.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")
六、参考资源
Qt OPC UA 官方文档:https://doc.qt.io/qt-5/qtopcua-index.html
OpenSSL 1.1.1w 下载:https://slproweb.com/products/Win32OpenSSL.html
Strawberry Perl:https://strawberryperl.com