Qt OPC UA插件在所有构建配置中始终链接Debug版本
Qt OPC UA插件始终链接Debug版本DLL的问题
问题现象
- 使用CMake构建Qt项目时,无论选择何种构建配置,编译后的可执行文件始终链接Debug版本的
Qt6OpcUad.dll,而非预期的Release版本QtOpcUa.dll,该问题已通过运行exe时的错误弹窗和DependencyWalker工具确认。
当前项目配置
项目中按照标准方式链接Qt OPC UA插件:
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpcUa Widgets) target_link_libraries(opcuaviewer PRIVATE Qt6::Core Qt6::Gui Qt6::OpcUa Qt6::Widgets )
- 插件已按照官方文档编译完成,Debug模式下项目运行正常,且Qt Creator中可正常构建并运行官方示例“Opc UA Viewer”
QtOpcUa.dll(Release版)和Qt6OpcUad.dll(Debug版)均存在于C:\Qt\6.7.1\msvc2019_64\bin目录中
尝试解决时的报错
尝试通过设置MAP_IMPORTED_CONFIG变量强制链接Release版本时,CMake抛出以下错误:
[cmake] CMake Error in CMakeLists.txt: [cmake] IMPORTED_IMPLIB not set for imported target "Qt6::OpcUa" configuration [cmake] "Release". [cmake] [cmake] CMake Error in CMakeLists.txt: [cmake] IMPORTED_LOCATION not set for imported target "Qt6::OpcUa" configuration [cmake] "Release". [cmake] [cmake] CMake Error in CMakeLists.txt: [cmake] IMPORTED_IMPLIB not set for imported target "Qt6::OpcUa" configuration [cmake] "Release". [cmake] [cmake] -- Generating done (0.0s) [cmake] CMake Generate step failed. Build files cannot be regenerated correctly.
- 无论在
find_package指令之前还是链接目标之后设置该属性,都会触发上述错误,但为Qt6::Core设置相同属性时可正常工作
环境信息
- Qt版本:6.7.1
- 操作系统:Windows 10
- 编译器:MSVC2019 64位
更新:手动指定属性后的情况
按照建议在CMakeLists.txt中添加以下配置:
set_target_properties(Qt6::OpcUa PROPERTIES IMPORTED_IMPLIB_RELEASE "C:/Qt/6.7.1/msvc2019_64/lib/Qt6OpcUa.lib") set_target_properties(Qt6::OpcUa PROPERTIES IMPORTED_LOCATION_RELEASE "C:/Qt/6.7.1/msvc2019_64/lib/Qt6OpcUa.dll") set_target_properties(Qt6::OpcUa PROPERTIES MAP_IMPORTED_CONFIG_DEBUG Release) set_target_properties(Qt6::OpcUa PROPERTIES MAP_IMPORTED_CONFIG_RELEASE Release)
- 构建过程可正常完成,但生成的exe仍链接Debug版本的
Qt6OpcUad.dll - 删除本地Debug版本插件后,CMake报错找不到
Qt6OpcUad.lib,但该文件本不应被项目引用
更新II:发现插件安装问题
检查Qt安装目录后发现,C:\Qt\6.7.1\msvc2019_64\lib\cmake\Qt6OpcUa\Qt6OpcUaTargets-release.cmake文件缺失。以下是编译Qt OPC UA插件时使用的完整批处理脚本:
set msvcSetEnvScript="C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" set qtVersion=6.7.1 set qtSetEnvScript="C:\Qt\%qtVersion%\msvc2019_64\bin\qtenv2.bat" set buildDir= pushd "C:\" call %qtSetEnvScript% call %msvcSetEnvScript% popd git clone https://code.qt.io/qt/qtopcua.git cd qtopcua git checkout %qtVersion% REM Build Release. mkdir build cd build call qt-cmake -G "NMake Makefiles" .. -DQT_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release nmake nmake install REM Build Debug. cd .. mkdir build_debug cd build_debug call qt-cmake -G "NMake Makefiles" .. -DQT_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Debug nmake nmake install popd
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

