我已经在 Windows 上构建了 qt-6.6-static,我想构建一个或两个静态项目。我尝试构建一个示例程序“Scenegraph”,但它失败并显示错误消息。
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Qt/6.6.0-static/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x82): undefined reference to `__imp_VariantInit'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Qt/6.6.0-static/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x98): undefined reference to `__imp_VariantClear'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Qt/6.6.0-static/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x1d9): undefined reference to `__imp_VariantClear'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Qt/6.6.0-static/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x24d): undefined reference to `__imp_VariantClear'
collect2.exe: error: ld returned 1 exit status
我使用的编译器是gcc 13.2.0
显然这表明我应该链接到 oleaut32.lib 但 qt 文件已经这样做了。在调试模式下测试了 oleaut lib,它似乎正在工作。
QT += quick
QT += opengl
CONFIG += c++2a
CONFIG += static
QMAKE_CXXFLAGS += -std=c++2a
LIBS += -lgmp
SOURCES += \
Squircle.cpp \
glrenderer.cpp \
main.cpp \
RESOURCES += \
qml.qrc
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
Squircle.h \
glrenderer.h \
DISTFILES += main.qml
还有其他人为此苦苦挣扎吗?除了“使用动态构建”之外还有其他解决方案吗?
//由于评论而添加编辑
我忘了提及,我已尝试添加链接 LIBS +=-loleaut32 仍然遇到相同的错误。
这也是一些编译输出。所以链接肯定已经存在了。
libqwindows.a -ldwmapi -limm32 -loleaut32 -lsetupapi -lshlwapi -lwinspool
lib/libQt6Network.a -lbrotlidec -lbrotlicommon
我的解决方案是将 -loleaut32 添加到
或者,问题的根源似乎是Src/qtbase/src/plugins/networkinformation/networklistmanager/CMakeLists.txt中Windows上的额外库依赖项只考虑了MSVC编译器
更改此行:
qt_internal_extend_target(QNLMNIPlugin CONDITION MSVC
到
qt_internal_extend_target(QNLMNIPlugin CONDITION MSVC OR WIN32
再次构建静态qt也解决了这个问题。但我不知道如何处理 CMakeLists 文件,这可能不是一个“好的”解决方案。