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 WIN32QMAKE_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 = -MPQMAKE_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 = /LTCGQMAKE_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.libQMAKE_LIBS_QT_ENTRY = -lqtmain
QMAKE_MOC = $$[QT_INSTALL_BINS]\moc.exe
QMAKE_UIC = $$[QT_INSTALL_BINS]\uic.exe
QMAKE_IDC = $$[QT_INSTALL_BINS]\idc.exeQMAKE_IDL = midl
QMAKE_LIB = lib /NOLOGO
QMAKE_RC = rcQMAKE_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 = mkdirVCPROJ_EXTENSION = .vcxproj
VCSOLUTION_EXTENSION = .sln
VCPROJ_KEYWORD = Qt4VSv1.0
load(qt_config)
@ -
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