Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-114243

Qt 6.5 regression with static cross-compiling for Windows

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P3: Somewhat important
    • 6.7.1, 6.8.0 FF
    • 6.5.1, 6.5.2, 6.6.1
    • Build System: CMake
    • None
    • MingW64
    • Windows
    • 230c53ad9 (dev), 49283c156 (6.6), efa74aff8 (6.5), 938bdccb8 (dev), 63395dda3 (6.7)

    Description

      Host computer: Ubuntu 20.04

      add-apt-repository ppa:rncbc/qt6.5-static-focal
      add-apt-repository ppa:cybermax-dexter/mingw-w64-backport
      apt-get install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 qtbase6-static
      update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
      update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
      

      Using cross-compiled, static Qt 6.5.1:
      (note - openssl 3.0.9 cross-compiled as well and installed correctly to /tmp/openssl-3.0.9):

      ./configure -prefix /tmp/qt -no-feature-sql-odbc -sql-sqlite -platform linux-g++-64 -qt-host-path /opt/qt6.5-static -xplatform win32-g++ -device-option CROSS_COMPILE=x86_64-w64-mingw32- -release -opengl desktop -mp -static -static-runtime -no-shared -nomake examples -no-icu -optimize-size -openssl-linked -- -DOPENSSL_ROOT_DIR=/tmp/openssl-3.0.9 -DCMAKE_TOOLCHAIN_FILE=/tmp/profile.cmake
      

      Also, /tmp/profile.cmake:

      set(CMAKE_SYSTEM_NAME Windows)
      set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
      set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
      set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
      set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
      set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
      set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
      set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 /)
      set(CMAKE_C_FLAGS_RELEASE "-m64 -Os")
      set(CMAKE_CXX_FLAGS_RELEASE "-m64 -Os")
      

      When I try to cross-compile a Qt application, I receive the following linker errors (using https://www.github.com/squinky86/STIGQter as the example here):

      x86_64-w64-mingw32-g++ -Wl,-s -static -Wl,-subsystem,windows -mthreads -o release/STIGQter.exe release/asset.o release/assetview.o release/cci.o release/cklcheck.o release/common.o release/control.o release/dbmanager.o release/family.o release/help.o release/main.o release/stig.o release/stigcheck.o release/stigedit.o release/stigqter.o release/supplement.o release/tabviewwidget.o release/worker.o release/workerassetadd.o release/workerassetdelete.o release/workercciadd.o release/workerccidelete.o release/workercheckversion.o release/workerckl.o release/workercklexport.o release/workercklimport.o release/workercklupgrade.o release/workercmrsexport.o release/workeremassreport.o release/workerfindingsreport.o release/workerhtml.o release/workerimportemass.o release/workerimportemasscontrol.o release/workermapunmapped.o release/workerpoamreport.o release/workerstigadd.o release/workerstigdelete.o release/workerstigdownload.o release/stigqter_plugin_import.o release/qrc_qmake_resources.o release/moc_asset.o release/moc_assetview.o release/moc_cci.o release/moc_cklcheck.o release/moc_control.o release/moc_family.o release/moc_help.o release/moc_stig.o release/moc_stigcheck.o release/moc_stigedit.o release/moc_stigqter.o release/moc_supplement.o release/moc_tabviewwidget.o release/moc_worker.o release/moc_workerassetadd.o release/moc_workerassetdelete.o release/moc_workercciadd.o release/moc_workerccidelete.o release/moc_workercheckversion.o release/moc_workerckl.o release/moc_workercklexport.o release/moc_workercklimport.o release/moc_workercklupgrade.o release/moc_workercmrsexport.o release/moc_workeremassreport.o release/moc_workerfindingsreport.o release/moc_workerhtml.o release/moc_workerimportemass.o release/moc_workerimportemasscontrol.o release/moc_workermapunmapped.o release/moc_workerpoamreport.o release/moc_workerstigadd.o release/moc_workerstigdelete.o release/moc_workerstigdownload.o /tmp/libzip-1.9.2/lib/libzip.a /tmp/libxlsxwriter-RELEASE_1.1.5/libxlsxwriter.a /tmp/zlib-ng-2.0.7/libz.a /tmp/qt/plugins/styles/libqwindowsvistastyle.a -L/tmp/openssl-3.0.9 /tmp/qt/lib/objects-Release/QWindowsIntegrationPlugin_resources_1/.rcc/qrc_openglblacklists.cpp.obj /tmp/qt/lib/objects-Release/QWindowsIntegrationPlugin_resources_2/.rcc/qrc_cursors.cpp.obj /tmp/qt/plugins/platforms/libqwindows.a -limm32 -loleaut32 -lshlwapi -lwinspool -lwtsapi32 -lshcore -lcomdlg32 -ld3d9 -lruntimeobject /tmp/qt/lib/libQt6OpenGL.a -lopengl32 /tmp/qt/plugins/imageformats/libqgif.a /tmp/qt/plugins/imageformats/libqico.a /tmp/qt/plugins/imageformats/libqjpeg.a /tmp/qt/lib/libQt6BundledLibjpeg.a /tmp/qt/plugins/networkinformation/libqnetworklistmanager.a /tmp/qt/plugins/tls/libqopensslbackend.a /tmp/qt/plugins/tls/libqschannelbackend.a -lbcrypt -lncrypt /tmp/qt/plugins/sqldrivers/libqsqlite.a /tmp/qt/lib/objects-Release/Widgets_resources_1/.rcc/qrc_qstyle.cpp.obj /tmp/qt/lib/objects-Release/Widgets_resources_2/.rcc/qrc_qstyle1.cpp.obj /tmp/qt/lib/objects-Release/Widgets_resources_3/.rcc/qrc_qmessagebox.cpp.obj /tmp/qt/lib/libQt6Widgets.a -ldwmapi -luxtheme /tmp/qt/lib/objects-Release/Gui_resources_1/.rcc/qrc_qpdf.cpp.obj /tmp/qt/lib/objects-Release/Gui_resources_2/.rcc/qrc_gui_shaders.cpp.obj /tmp/qt/lib/libQt6Gui.a -ld3d11 -ldxgi -ldxguid -ldcomp -lgdi32 /tmp/qt/lib/libQt6BundledHarfbuzz.a /tmp/qt/lib/libQt6BundledFreetype.a /tmp/qt/lib/libQt6BundledLibpng.a -ld2d1 -ldwrite /tmp/qt/lib/libQt6Network.a -ldnsapi -liphlpapi -lsecur32 -lwinhttp /tmp/qt/lib/libQt6Sql.a /tmp/qt/lib/libQt6Xml.a /tmp/qt/lib/libQt6Core.a /tmp/qt/lib/libQt6BundledZLIB.a -lsynchronization -lmpr -luserenv -ladvapi32 -lauthz -lkernel32 -lnetapi32 -lole32 -lshell32 -luser32 -luuid -lversion -lwinmm /tmp/qt/lib/libQt6BundledPcre2.a -lssl -lcrypto -lws2_32 -lcrypt32 release/STIGQter_res.o -lmingw32 /tmp/qt/lib/libQt6EntryPoint.a -lshell32  
      /usr/bin/x86_64-w64-mingw32-ld: /tmp/qt/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x10f): undefined reference to `__imp_VariantInit'
      /usr/bin/x86_64-w64-mingw32-ld: /tmp/qt/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x149): undefined reference to `__imp_VariantClear'
      /usr/bin/x86_64-w64-mingw32-ld: /tmp/qt/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x192): undefined reference to `__imp_VariantClear'
      /usr/bin/x86_64-w64-mingw32-ld: /tmp/qt/plugins/networkinformation/libqnetworklistmanager.a(qnetworklistmanagerevents.cpp.obj):qnetworklistmanagerevents.cpp:(.text$_ZN25QNetworkListManagerEvents24checkBehindCaptivePortalEv+0x1ab): undefined reference to `__imp_VariantClear'
      collect2: error: ld returned 1 exit status
      

      It looks like -lole32 and -loleaut32 are both added to the compilation line, which I thought is what provided these undefined references. This worked fine on all 6.4 versions. I never did try 6.5.0. The test case I'm using for this is Appveyor (https://github.com/squinky86/STIGQter/blob/master/appveyor.yml).

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              qtbuildsystem Qt Build System Team
              squinky86 Jon Hood
              Votes:
              0 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes