Static Build of Qt = Invalid tool chain



  • 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)
    @


  • Moderators

    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 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


Log in to reply
 

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