Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Call for Presentations - Qt World Summit

    Static Build of Qt = Invalid tool chain

    Installation and Deployment
    2
    3
    3275
    Loading More Posts
    • 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.
    • F
      Francesco last edited by

      Hello. I built Qt statically for MSVC2010 with the following options:
      @-static -release -qt-libjpeg -qt-zlib -qt-libpng -nomake examples -nomake demos -no-exceptions -no-stl -no-rtti -no-qt3support -no-scripttools -no-openssl -no-opengl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite -platform win32-msvc2010@

      After that, I added this static build (which is located in C:\Qt\4.7.3-static) to Qt Creator, but for some reason it gives me no tool chains for the static version. So i checked the info Qt Creator gives me for the static version and it seems like the ABI is MSVC2008, while the non-static version has MSVC2010. The mkspec is win32-msvc2010 for both.

      My qmake.conf:
      @#

      qmake configuration for win32-msvc2010

      Written for Microsoft VC2005.NET

      MAKEFILE_GENERATOR = MSBUILD
      TEMPLATE = app
      CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
      QT += core gui
      DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT
      QMAKE_COMPILER_DEFINES += _MSC_VER=1600 WIN32

      QMAKE_CC = cl
      QMAKE_LEX = flex
      QMAKE_LEXFLAGS =
      QMAKE_YACC = byacc
      QMAKE_YACCFLAGS = -d
      QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
      QMAKE_CFLAGS_WARN_ON = -W3
      QMAKE_CFLAGS_WARN_OFF = -W0
      QMAKE_CFLAGS_RELEASE = -O2 -MT
      QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
      QMAKE_CFLAGS_DEBUG = -Zi -MDd
      QMAKE_CFLAGS_YACC =
      QMAKE_CFLAGS_LTCG = -GL
      QMAKE_CFLAGS_MP = -MP

      QMAKE_CXX = $$QMAKE_CC
      QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
      QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
      QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
      QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
      QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
      QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
      QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
      QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
      QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP
      QMAKE_CXXFLAGS_STL_ON = -EHsc
      QMAKE_CXXFLAGS_STL_OFF =
      QMAKE_CXXFLAGS_RTTI_ON = -GR
      QMAKE_CXXFLAGS_RTTI_OFF =
      QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc
      QMAKE_CXXFLAGS_EXCEPTIONS_OFF =

      QMAKE_INCDIR =
      QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
      QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]

      QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$obj $src
      QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ $<
      QMAKE_RUN_CC_IMP_BATCH = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ @<<
      QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$obj $src
      QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $<
      QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<

      QMAKE_LINK = link
      QMAKE_LFLAGS = /NOLOGO
      QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /NODEFAULTLIB:”MSVCRT”
      QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
      QMAKE_LFLAGS_DEBUG = /DEBUG
      QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
      QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='' processorArchitecture=''"
      QMAKE_LFLAGS_DLL = /DLL
      QMAKE_LFLAGS_LTCG = /LTCG

      QMAKE_LIBS_CORE = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib
      QMAKE_LIBS_GUI = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib user32.lib advapi32.lib
      QMAKE_LIBS_NETWORK = ws2_32.lib
      QMAKE_LIBS_OPENGL = glu32.lib opengl32.lib gdi32.lib user32.lib
      QMAKE_LIBS_COMPAT = advapi32.lib shell32.lib comdlg32.lib user32.lib gdi32.lib ws2_32.lib

      QMAKE_LIBS_QT_ENTRY = -lqtmain

      QMAKE_MOC = $$[QT_INSTALL_BINS]\moc.exe
      QMAKE_UIC = $$[QT_INSTALL_BINS]\uic.exe
      QMAKE_IDC = $$[QT_INSTALL_BINS]\idc.exe

      QMAKE_IDL = midl
      QMAKE_LIB = lib /NOLOGO
      QMAKE_RC = rc

      QMAKE_ZIP = zip -r -9

      QMAKE_COPY = copy /y
      QMAKE_COPY_DIR = xcopy /s /q /y /i
      QMAKE_MOVE = move
      QMAKE_DEL_FILE = del
      QMAKE_DEL_DIR = rmdir
      QMAKE_CHK_DIR_EXISTS = if not exist
      QMAKE_MKDIR = mkdir

      VCPROJ_EXTENSION = .vcxproj
      VCSOLUTION_EXTENSION = .sln
      VCPROJ_KEYWORD = Qt4VSv1.0
      load(qt_config)
      @

      1 Reply Last reply Reply Quote 0
      • T
        tobias.hunger last edited by

        Static libraries in windows are really tricky when it comes to figuring out the tool chain. It should actually leave the MSVC flavor undefined in that case, but that seems to not happen for you. A work-around is to put a dynamic QtCore right next to the static one. Creator will pick that up first and figure out the correct ABI using it.

        Having said that: Could you please send me your static QtCore library? I would really like to see what is going wrong there when it tries to detect it. I'll send you a message via devnet with my email if you do not mind.

        1 Reply Last reply Reply Quote 0
        • F
          Francesco last edited by

          [quote author="Tobias Hunger" date="1311690814"]Static libraries in windows are really tricky when it comes to figuring out the tool chain. It should actually leave the MSVC flavor undefined in that case, but that seems to not happen for you. A work-around is to put a dynamic QtCore right next to the static one. Creator will pick that up first and figure out the correct ABI using it.

          Having said that: Could you please send me your static QtCore library? I would really like to see what is going wrong there when it tries to detect it. I'll send you a message via devnet with my email if you do not mind.[/quote]

          Hmm I think I know what's the problem: I am recompiling the msvc2008 package for msvc2010 instead of using the clean sources because it worked the first time for the non-static version. I had no idea that static libraries were this picky :P. If nothing else works, I'll try with the clean sources.

          Also, what do you mean with "putting a dynamic QtCore next to the static one"? Putting the dynamic dll in the bin folder of the static version? Or put it in the same folder as the lib?

          EDIT: replacing QtCore.dll with the non-static one fixed it! Thanks for the workaround. I mailed you the lib btw

          1 Reply Last reply Reply Quote 0
          • First post
            Last post