problems creating static Qt (was "5.10.1 broke one of my builds")



  • UPDATE: I'm renaming this thread, as I've discovered that the problem isn't specific to 5.10.1. I've come up with a workaround, described here.

    ~~

    I built a 5.10.1 for static builds, and I'm now getting lots of unresolved symbols at link. Interestingly enough, my non-static build now breaks in identical fashion. Most of them seem related either to zlib or to qserialport:

    
    C:\qt\static\lib\libQt5Svgd.a(qsvgtinydocument.o): In function `qt_inflateGZipDataFrom':
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtsvg\src\svg/qsvgtinydocument.cpp:106: undefined reference to `z_inflateInit2_'
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtsvg\src\svg/qsvgtinydocument.cpp:133: undefined reference to `z_inflate'
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtsvg\src\svg/qsvgtinydocument.cpp:139: undefined reference to `z_inflateEnd'
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtsvg\src\svg/qsvgtinydocument.cpp:153: undefined reference to `z_inflateReset'
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtsvg\src\svg/qsvgtinydocument.cpp:161: undefined reference to `z_inflateEnd'
    C:\qt\static\plugins\imageformats\libqtiffd.a(tif_zip.o): In function `ZIPCleanup':
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtimageformats\src\plugins\imageformats\tiff/../../../3rdparty/libtiff/libtiff/tif_zip.c:340: undefined reference to `z_deflateEnd'
    C:\Qt\Static\src\qt-everywhere-opensource-src-5.9.1\qtimageformats\src\plugins\imageformats\tiff/../../../3rdparty/libtiff/libtiff/tif_zip.c:343: undefined reference to `z_inflateEnd'
    .
    .
    .
    

    Also, why is build still using the qt-everywhere-opensource-src-5.9.1 directory?


  • Lifetime Qt Champion

    Hi,

    Did you do an out of source build ?
    Is your kit pointing to the right version of Qt ?
    Are you sure there's not a mix between your current static build and the old one ?



  • Hi Samuel -

    I can't remember what "out of source build" means. I used the script windows-build-qt-static.ps1, though I did have to make a couple minor modifications (worked for 5.9.1).

    Yes, my kit's pointing to my build of 5.10.1 (static).

    I don't know how there'd be a mix between builds, but I suppose anything's possible. Assuming this is the issue, how would I remedy it -- delete and reinstall?

    Thanks....


  • Lifetime Qt Champion

    It's: "not building in the source folder".

    I'd rename the folder to something else, then call make install from your 5.9.1 build folder. Then I'd ensure that the 5.10.1 doesn't use the same prefix as the 5.9.1.



  • I just noticed that my /Qt/Static/5.9.1 folder is now empty. Something definitely went awry in the build process.

    Should I unzip the .zip file and start from scratch? First for 5.9.1, then 5.10.1? Anything I should do before this?

    Thanks...


  • Lifetime Qt Champion

    Not much, ensure that your build folders are not the same as well as use a different prefix and you should be good to go.



  • "different prefix?"


  • Lifetime Qt Champion

    The install prefix, basically the folder where make install will put stuff in.


  • Moderators

    @SGaist said in 5.10.1 broke one of my builds:

    The install prefix, basically the folder where make install will put stuff in.

    To add to @SGaist's explanation, -prefix is one of the options for configuring your Qt build: http://doc.qt.io/qt-5/configure-options.html



  • So, I'm back at this. I tried to build a static version of 5.9.4 just to see if that would work, and during configure, I get lots and lot of errors due to a missing OpenGL header file (GLES2/gl2.h). I've never worked with OpenGL directly, so I know very little about it, but in doing a bit of searching, it appears quite tedious to install and configure.

    I'm assuming that Qt requires OpenGL for something, so merely removing it from the configure command probably isn't an option. Can someone recommend a better course of action?

    Thanks...

    EDIT: here's the configure command from the script (with a couple changes from me):

        cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
            -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype desktop -no-openssl `
            -opensource -confirm-license `
            -make libs -nomake tools -nomake examples -nomake tests"
    

    When I removed the -opengl option, I get a message warning me that using OpenGL ES 2.0 on Windows without ANGLE will most likely cause the build to fail.


  • Lifetime Qt Champion

    What compiler are you using ?



  • Mingw530_32.

    EDIT: Additional information, from http://doc.qt.io/qt-5/windows-requirements.html#graphics-drivers:

    Dynamically Loading Graphics Drivers
    
    In addition to the build time configuration, Qt supports choosing and loading the OpenGL implementation at runtime. To use this mode, pass -opengl dynamic to the configure script.
    
    configure -opengl dynamic
    
    Note: As of Qt 5.5 this is the configuration used by the official, pre-built binary packages of Qt. It is strongly recommended to use it also in custom builds, especially for Qt binaries that are deployed alongside applications.
    

    If I'm reading this correctly, this wouldn't be a good option for a static build, would it?



  • OK, I have another update on this. I think that the whole issue with OpenGL may be due to either a bug in the configure program, or due to me leaving some file behind that I should have deleted between build attempts.

    I noticed that this command:

        cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
            -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -no-openssl `
            -opensource -confirm-license `
            -make libs -nomake tools -nomake examples -nomake tests"
    

    (note the presence of the -opengl option)

    Produced the error I mentioned above, along with an advisement to specify "-opengl desktop." On a hunch, after I ran this configure command, I ran configure again with only the "-opengl desktop" option, then ran make and make install. Both appear to have run successfully.

    The configure utility is a total black box to me, so I can't even speculate on why this might be happening. My next step is to see if this version of Qt looks good (and shows up) in Creator, then I'll do the same thing for 5.10.1 and compare results.


  • Lifetime Qt Champion

    Before 5.5 you had to choose whether you would be using the "full desktop OpenGL" backend or ANGLE which sits on top of OpenGL ES2. Since then Qt has a dynamic backend selector which adapts to what is available on the machine your application is run on.

    You can still do a hard selection if your application requires desktop OpenGL.



  • That makes sense, but it seems that the configure command was ignoring my "-opengl desktop" option when it was part of this command:

        cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
            -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -no-openssl `
            -opensource -confirm-license `
            -make libs -nomake tools -nomake examples -nomake tests"
    

    It was only when I re-ran configure with only the -opengl option, that it appeared to work. But, I just discovered that doing so failed to re-use my -prefix command, so it installed into /usr/local (on a Windows system). So, I'm running it again, using the "-redo" option.

    I wonder if the -opengl option is incompatible with one of the other options in that long command line...


  • Lifetime Qt Champion

    The options looks correct.

    However, what you should do is re-run from a clean state. Changing the OpenGL option is typically something that modifies the build setup.



  • So, what exactly does it mean to "re-run from a clean slate?" What all do I have to delete or uninstall? The target directory was empty when I did this the first time.


  • Lifetime Qt Champion

    It means that if you are using an out of source build, then delete folder in which you called configure. Otherwise, you have to cleanup the sources before calling configure again.


  • Moderators

    @mzimmers said in 5.10.1 broke one of my builds:

    So, what exactly does it mean to "re-run from a clean slate?" What all do I have to delete or uninstall?

    Delete all the files that were not part of the source code package. These are created the moment configure.bat starts running.

    Out-of-source builds, as mentioned by @SGaist, are the easiest to clean: You just delete the entire build folder.

    If you didn't use an out-of-source build but you did get the code via git, run this from the same folder as configure.bat to preserve your source files but remove all other files:

    > git clean -dfx
    > git submodule foreach "git clean -dfx"

    The target directory was empty when I did this the first time.

    The configuration files are created in your build directory, not your target (PREFIX) directory.

    P.S. Using -opengl desktop means that your end-user needs OpenGL drivers provided by their graphics card vendor to run apps built with Qt Quick. The drivers provided by Windows itself are too old.



  • Thanks, JKSH - I need static builds for delivering utility programs to customers. Your last paragraph suggests that opengl desktop probably isn't a good idea for me, then. What is the best approach for producing static builds?


  • Moderators

    @mzimmers said in 5.10.1 broke one of my builds:

    Thanks, JKSH - I need static builds for delivering utility programs to customers. Your last paragraph suggests that opengl desktop probably isn't a good idea for me, then. What is the best approach for producing static builds?

    Hi @mzimmers, I'm afraid I don't have much experience with static builds of Qt -- I only use dynamic linking.

    Which GUI technologies do your programs use? If it's Qt Widgets or the Graphics View Framework, then the OpenGL setting won't matter because those technologies don't use OpenGL.



  • I use mainly widgets, so I guess this doesn't matter too much, but I'd like to get to the bottom of the problem.

    This is my configure command:

        cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
            -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -no-openssl `
            -opensource -confirm-license `
            -make libs -nomake tools -nomake examples -nomake tests"
    

    Here are some extracts of the output from the static build script. I get the same results when building 5.9.4 or 5.10.1. (These were clean builds; I deleted the source directories and let the script re-extract.)

    Running configuration tests...
    Checking for valid makespec... yes
    Checking for alloca() in alloca.h... no
    Checking for alloca() in malloc.h... yes
    Checking for target architecture... i386
    Checking for SSE2 instructions... yes
    Checking for SSE3 instructions... yes
    Checking for SSSE3 instructions... yes
    Checking for SSE4.1 instructions... yes
    Checking for SSE4.2 instructions... yes
    Checking for AVX instructions... yes
    Checking for AVX2 instructions... yes
    Checking for AVX512 F instructions... yes
    Checking for AVX512 BW instructions... yes
    Checking for AVX512 CD instructions... yes
    Checking for AVX512 DQ instructions... yes
    Checking for AVX512 ER instructions... yes
    Checking for AVX512 IFMA instructions... yes
    Checking for AVX512 PF instructions... yes
    Checking for AVX512 VBMI instructions... yes
    Checking for AVX512 VL instructions... yes
    Checking for C++14 support... yes
    Checking for C++1z support... yes
    Checking for D-Bus >= 1.2... no
    Checking for F16C instructions... yes
    Checking for D-Bus >= 1.2 (host)... yes
    Checking for IncrediBuild... no
    Checking for udev... no
    Checking for -Og support... yes
    Checking for POSIX fallocate()... no
    Checking for precompiled header support... yes
    Checking for STL compatibility... yes
    Checking for zlib... yes
    Checking for eventfd... no
    Checking for inotify... no
    Checking for slog2... no
    Checking for 64 bit atomics... yes
    Checking for DoubleConversion... no
    Checking for PCRE2... no
    Checking for O_CLOEXEC... no
    Checking for working std::atomic for function pointers... yes
    Checking for getaddrinfo()... yes
    Checking for getifaddrs()... no
    Checking for IPv6 ifname... no
    Checking for OpenSSL Headers... no
    Checking for XCB >= 1.5 (core)... no
    Checking for DirectX SDK... no
    Checking for Direct 2D... no
    Checking for DirectWrite... yes
    Checking for DirectWrite 2... no
    Checking for EGL... no
    Checking for evdev... no
    Checking for GBM... no
    Checking for KMS... no
    Checking for LinuxFB... no
    Checking for mtdev... no
    Checking for OpenGL ES 2.0... no
    Checking for OpenVG... no
    Checking for default QPA platform... windows
    Checking for libjpeg... no
    Checking for libpng... no
    Checking for tslib... no
    Checking for xkbcommon... no
    Checking for XLib... no
    Checking for uxtheme.h... yes
    Checking for CUPS... no
    Checking for DB2 (IBM)... no
    Checking for InterBase... no
    Checking for MySQL... no
    Checking for OCI (Oracle)... no
    Checking for ODBC... yes
    Checking for PostgreSQL... no
    Checking for SQLite (version 2)... no
    Checking for TDS (Sybase)... no
    Checking for Direct3D 12... no
    Checking for SDL2... no
    Checking for Assimp... no
    Checking for Autodesk FBX... no
    Checking for Wayland EGL library... no
    Checking for BlueZ... no
    Checking for sensorfw... no
    Checking for Gypsy... no
    Checking for WinRT Geolocation API... no
    Checking for DirectShow... yes
    Checking for evr.h... yes
    Checking for Vivante GPU... no
    Checking for GStreamer 1.0... no
    Checking for GStreamer 0.10... no
    Checking for OpenAL... no
    Checking for libresourceqt5... no
    Checking for Windows Audio Services... no
    Checking for WMF... no
    Checking for wmsdk.h... no
    Checking for WShellItem... yes
    Checking for embedded... no
    Checking for Python 2... C:/Qt/Tools/mingw530_32/opt/bin/python2.exe
    Checking for system ninja... no
    Done running configuration tests.
    
    Configure summary:
    
    Build type: win32-g++ (i386, CPU features: <none>)
    Configuration: sse2 sse3 ssse3 sse4_1 sse4_2 avx avx2 avx512f avx512bw avx512cd avx512dq avx512er avx512ifma avx
    nt dbus no-pkg-config release_tools static stl
    Build options:
      Mode ................................... debug and release; default link: debug; optimized tools
      Optimize debug build ................... yes
      Optimize release build for size ........ no
      Building shared libraries .............. no
      Using C++ standard ..................... C++1z
      Using gold linker ...................... no
      Using precompiled headers .............. yes
      Using LTCG ............................. no
      Target compiler supports:
        SSE .................................. SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
        AVX .................................. AVX AVX2 F16C
        AVX512 ............................... F ER CD PF DQ BW VL IFMA VBMI
      Build parts ............................ libs examples tools
      App store compliance ................... no
    .
    .
    .
      Qt Gui ................................. yes
    .
    .
    .
    Qt Gui:
      Accessibility .......................... yes
      FreeType ............................... yes
        Using system FreeType ................ no
      HarfBuzz ............................... yes
        Using system HarfBuzz ................ no
      Fontconfig ............................. no
      Image formats:
        GIF .................................. yes
        ICO .................................. yes
        JPEG ................................. yes
          Using system libjpeg ............... no
        PNG .................................. yes
          Using system libpng ................ no
      EGL .................................... no
      OpenVG ................................. no
      OpenGL:
        ANGLE ................................ no
        Desktop OpenGL ....................... no
        Dynamic OpenGL ....................... no
        OpenGL ES 2.0 ........................ yes
        OpenGL ES 3.0 ........................ no
        OpenGL ES 3.1 ........................ no
      Session Management ..................... yes
    .
    .
    .
    Note: No wayland-egl support detected. Cross-toolkit compatibility disabled.
    
    WARNING: Using OpenGL ES 2.0 on Windows without ANGLE.
    The build will most likely fail.
    Specify -opengl desktop to use regular OpenGL.
    

    Any suggestions?

    Thanks...


  • Qt Champions 2017

    Do you have the DirectX SDK installed? If not, you should try that to have ANGLE enabled (and hopefully to make away with your problem).



  • @kshegunov I have no idea, but I'm actually less interested in finding an alternative to -opengl desktop, and more interested in finding out why the -opengl desktop option doesn't "take" unless it's specified by itself (separate configure command). But I'll look into the ANGLE alternative if I can't figure this out.

    I'm seeing all kinds of weirdness with this build attempt. My attempts to build on my system drive used up over 260GB of space before failing, so I installed an old HD I had, moved the installer over there, and it built, using only 30GB. As usual, I have absolutely no explanation why this would be the case.

    Thanks...


  • Qt Champions 2017

    @mzimmers said in problems creating static Qt (was "5.10.1 broke one of my builds"):

    I have no idea, but I'm actually less interested in finding an alternative to -opengl desktop

    Well, my asking is because ANGLE as far as I know interfaces with the D3D API and should make your build problem go away. Again, I'm speculating, but it's worth a try I think.



  • @kshegunov the build no longer fails, now that I'm using the 2nd configure command. But I'll look into your suggestion. If it results in a smaller footprint, it's worth doing.



  • I've come to the conclusion that my original problem stemmed from an odd issue with Powershell. A step in the script invokes an DOS script which in turn invokes the configure.exe program, passing through all arguments it received. At some point, at least one of the arguments "-opengl desktop" is lost. This occurs with Windows PowerShell 5.1 as well as PowerShell Core 6.0.2.

    My workaround is to change the script. This area:

        # Configure, compile and install Qt.
        Push-Location $QtSrcDir
        cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
            -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite -no-openssl `
            -opensource -confirm-license `
            -make libs -nomake tools -nomake examples -nomake tests"
        mingw32-make -k -j4
        mingw32-make -k install
        Pop-Location
    

    Should be changed to:

        # Configure, compile and install Qt.
        Push-Location $QtSrcDir
        cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
            -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -no-openssl `
            -opensource -confirm-license -skip qtwebengine`
            -make libs -nomake tools -nomake examples -nomake tests"
        cmd /c "configure.bat -redo -opengl desktop"
        mingw32-make -k -j4
        mingw32-make -k install
        Pop-Location
    

    Note that I also removed the "-qt-sql-sqlite" option due to other errors. I'd also recommend that you consider changing "-debug-and-release" to "-release."

    Thanks to all who looked at this with me.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.