Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt 5.12 and static build.
Forum Updated to NodeBB v4.3 + New Features

Qt 5.12 and static build.

Scheduled Pinned Locked Moved Unsolved General and Desktop
10 Posts 2 Posters 2.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • EndrII 0E Offline
    EndrII 0E Offline
    EndrII 0
    wrote on last edited by
    #1

    I have simple console application with qt core,
    I used to build a project with qt 5.11 and everything was fine, but when it was over 5.12, the following problem appeared:

    I build qt as follows:

    ./configure -confirm-license -prefix $BASE_DIR/$QT_DIR -release -optimize-size -static -no-opengl -no-openssl -opensource -nomake tests -nomake examples -no-gui -no-widgets -no-dbus -no-accessibility    
    

    qt is successfully built, but when I build my application with the static flag, it starts to require dynamic libraries (although this should not be, and everything was fine with qt 5.11) and is not going to happen because of this.

    export PATH=$PATH:$BASE_DIR/$QT_DIR
    $BASE_DIR/$QT_DIR/bin/qmake -r QMAKE_LFLAGS+="-static -static-libgcc -static-libstdc++" $BASE_DIR/CQtDeployer.pro    
    

    Here is the build error:

    g++ -static -static-libgcc -static-libstdc++ -Wl,-O1 -Wl,--gc-sections -o build/release/cqtdeployer main.o   -L/media/D/own/Console-QtDeployer/QuasarAppLib/build/release -lQuasarApp -L/media/D/own/Console-QtDeployer/Deploy/build/release -lDeploy -L/media/D/own/Console-QtDeployer/pe/pe-parser-library/build/release -lpe-parser-library -L/media/D/own/Console-QtDeployer/staticQt/lib -lQt5Core -lm /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libpcre2-16.so /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/x86_64-linux-gnu/libgthread-2.0.so /usr/lib/x86_64-linux-gnu/libglib-2.0.so -lpthread   
    /usr/bin/ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libz.so'
    collect2: error: ld returned 1 exit status
    Makefile:116: recipe for target 'build/release/cqtdeployer' failed
    make[1]: *** [build/release/cqtdeployer] Error 1
    make[1]: выход из каталога «/media/D/own/Console-QtDeployer/CQtDeployer»
    Makefile:178: recipe for target 'sub-CQtDeployer-make_first-ordered' failed
    make: *** [sub-CQtDeployer-make_first-ordered] Error 2
    
    1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      Use built-in libz when building Qt:

      -zlib ................ Select used zlib [system/qt]
      

      (Z(:^

      1 Reply Last reply
      1
      • EndrII 0E Offline
        EndrII 0E Offline
        EndrII 0
        wrote on last edited by
        #3

        Thanks, it helped me, but now it requires a different library, is it possible to customize qt in some way so that by default it will always choose its own library build, if possible?

        now :

        /usr/bin/ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libpcre2-16.so'
        
        
        1 Reply Last reply
        0
        • sierdzioS Offline
          sierdzioS Offline
          sierdzio
          Moderators
          wrote on last edited by
          #4

          No, each external lib has to be configured separately. See output of configure --help.

          (Z(:^

          1 Reply Last reply
          1
          • EndrII 0E Offline
            EndrII 0E Offline
            EndrII 0
            wrote on last edited by
            #5

            Thanks for the help

            1 Reply Last reply
            0
            • EndrII 0E Offline
              EndrII 0E Offline
              EndrII 0
              wrote on last edited by
              #6
              This post is deleted!
              1 Reply Last reply
              0
              • EndrII 0E Offline
                EndrII 0E Offline
                EndrII 0
                wrote on last edited by
                #7

                @sierdzio
                Still such question why at static assembly dynamic still can be required?

                g++ -static -Wl,-O1 -Wl,--gc-sections -o build/release/cqtdeployer main.o   -L/media/D/own/Console-QtDeployer/QuasarAppLib/build/release -lQuasarApp -L/media/D/own/Console-QtDeployer/Deploy/build/release -lDeploy -L/media/D/own/Console-QtDeployer/pe/pe-parser-library/build/release -lpe-parser-library -L/media/D/own/Console-QtDeployer/staticQt/lib -lQt5Core -lm /media/D/own/Console-QtDeployer/staticQt/lib/libqtpcre2.a /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/x86_64-linux-gnu/libgthread-2.0.so /usr/lib/x86_64-linux-gnu/libglib-2.0.so -lpthread   
                /usr/bin/ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libdl.so'
                collect2: error: ld returned 1 exit status
                Makefile:117: recipe for target 'build/release/cqtdeployer' failed
                make[1]: *** [build/release/cqtdeployer] Error 1
                make[1]: выход из каталога «/media/D/own/Console-QtDeployer/CQtDeployer»
                Makefile:178: recipe for target 'sub-CQtDeployer-make_first-ordered' failed
                make: *** [sub-CQtDeployer-make_first-ordered] Error 2
                
                
                1 Reply Last reply
                0
                • sierdzioS Offline
                  sierdzioS Offline
                  sierdzio
                  Moderators
                  wrote on last edited by
                  #8

                  No idea. Perhaps you should pass -static-libgcc -static-libstdc++ to Qt compilation as well. Because your code will use static runtime, but Qt still expects dynamic one.

                  (Z(:^

                  EndrII 0E 1 Reply Last reply
                  0
                  • sierdzioS sierdzio

                    No idea. Perhaps you should pass -static-libgcc -static-libstdc++ to Qt compilation as well. Because your code will use static runtime, but Qt still expects dynamic one.

                    EndrII 0E Offline
                    EndrII 0E Offline
                    EndrII 0
                    wrote on last edited by
                    #9

                    @sierdzio
                    did not help (
                    I reopen this issue.

                    1 Reply Last reply
                    0
                    • EndrII 0E Offline
                      EndrII 0E Offline
                      EndrII 0
                      wrote on last edited by
                      #10

                      This is more like a qmake bug.
                      The fact is that I changed the list of libraries necessary for linking in my makefile to

                      LIBS          = $(SUBLIBS) -L/media/D/own/Console-QtDeployer/QuasarAppLib/build/release -lQuasarApp -L/media/D/own/Console-QtDeployer/Deploy/build/release -lDeploy -L/media/D/own/Console-QtDeployer/pe/pe-parser-library/build/release -lpe-parser-library -L/media/D/own/Console-QtDeployer/staticQt/lib -lQt5Core -lm /media/D/own/Console-QtDeployer/staticQt/lib/libqtpcre2.a -ldl -lglib-2.0 -lpthread
                      

                      and it all worked, I got the right binary.

                      before editing was:

                      
                      CC            = gcc
                      CXX           = g++
                      DEFINES       = -DWITHOUT_BASE_TESTS -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_CORE_LIB
                      CFLAGS        = -pipe -O2 -Wall -W -ffunction-sections -fdata-sections -D_REENTRANT -fPIC $(DEFINES)
                      CXXFLAGS      = -pipe -O2 -std=gnu++1y -Wall -W -ffunction-sections -fdata-sections -D_REENTRANT -fPIC $(DEFINES)
                      INCPATH       = -I. -I../QuasarAppLib -I../Deploy -I../pe/pe-parser-library/include -I../staticQt/include -I../staticQt/include/QtCore -I. -I../staticQt/mkspecs/linux-g++
                      QMAKE         = /media/D/own/Console-QtDeployer/staticQt/bin/qmake
                      DEL_FILE      = rm -f
                      CHK_DIR_EXISTS= test -d
                      MKDIR         = mkdir -p
                      COPY          = cp -f
                      COPY_FILE     = cp -f
                      COPY_DIR      = cp -f -R
                      INSTALL_FILE  = install -m 644 -p
                      INSTALL_PROGRAM = install -m 755 -p
                      INSTALL_DIR   = cp -f -R
                      QINSTALL      = /media/D/own/Console-QtDeployer/staticQt/bin/qmake -install qinstall
                      QINSTALL_PROGRAM = /media/D/own/Console-QtDeployer/staticQt/bin/qmake -install qinstall -exe
                      DEL_FILE      = rm -f
                      SYMLINK       = ln -f -s
                      DEL_DIR       = rmdir
                      MOVE          = mv -f
                      TAR           = tar -cf
                      COMPRESS      = gzip -9f
                      DISTNAME      = cqtdeployer1.0.0
                      DISTDIR = /media/D/own/Console-QtDeployer/CQtDeployer/.tmp/cqtdeployer1.0.0
                      LINK          = g++
                      LFLAGS        = -static -static-libgcc -static-libstdc++ -Wl,-O1 -Wl,--gc-sections
                      LIBS          = $(SUBLIBS) -L/media/D/own/Console-QtDeployer/QuasarAppLib/build/release -lQuasarApp -L/media/D/own/Console-QtDeployer/Deploy/build/release -lDeploy -L/media/D/own/Console-QtDeployer/pe/pe-parser-library/build/release -lpe-parser-library -L/media/D/own/Console-QtDeployer/staticQt/lib -lQt5Core -lm /media/D/own/Console-QtDeployer/staticQt/lib/libqtpcre2.a /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/x86_64-linux-gnu/libgthread-2.0.so /usr/lib/x86_64-linux-gnu/libglib-2.0.so -lpthread   
                      AR            = ar cqs
                      RANLIB        = 
                      SED           = sed
                      STRIP         = strip
                      

                      my pro file:

                      #
                      # Copyright (C) 2018-2019 QuasarApp.
                      # Distributed under the lgplv3 software license, see the accompanying
                      # Everyone is permitted to copy and distribute verbatim copies
                      # of this license document, but changing it is not allowed.
                      #
                      
                      QT -= gui
                      
                      CONFIG += c++14 console
                      CONFIG -= app_bundle
                      
                      # The following define makes your compiler emit warnings if you use
                      # any feature of Qt which as been marked deprecated (the exact warnings
                      # depend on your compiler). Please consult the documentation of the
                      # deprecated API in order to know how to port your code away from it.
                      DEFINES += QT_DEPRECATED_WARNINGS
                      
                      # You can also make your code fail to compile if you use deprecated APIs.
                      # In order to do so, uncomment the following line.
                      # You can also select to disable deprecated APIs only up to a certain version of Qt.
                      #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
                      
                      CONFIG(release, debug|release): {
                          DESTDIR="$$PWD/build/release"
                      } else {
                          DESTDIR="$$PWD/build/debug"
                      }
                      
                      include('$$PWD/../QuasarAppLib/QuasarLib.pri')
                      include('$$PWD/../Deploy/Deploy.pri')
                      include('$$PWD/../pe/pe-parser-library/pe-parser-library.pri')
                      
                      
                      TARGET = cqtdeployer
                      
                      SOURCES += \
                              main.cpp \
                      
                      
                      win32: RC_ICONS = $$PWD/../res/icon.ico
                      

                      maybe you need to configure qmake in some special way?

                      1 Reply Last reply
                      1

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved