Absturz mit selbst compilierter Library für MSVC 2008

Alles rund um die Programmierung mit Qt
Antworten
Andy2211
Beiträge: 65
Registriert: 29. September 2008 23:02

Absturz mit selbst compilierter Library für MSVC 2008

Beitrag von Andy2211 »

Hallo,
habe die QT Lib für VS 08 SP1 gebaut mit dem MT Schalter, um das Executeable spaeter auf anderen Maschinen verwenden zu koennen.

Leider stuertzt das Programm mit dieser Library per Heep Free Action staendig ab. Habe dann mal die original Library benutzt, die von Qt kam mit MD, damit funktioniert alles.
Habe dann mal die ganze Library mit MinGW und dem g++ Compiler benutzt und siehe da.. es laeuft auch...

Hat jemand schonmal so eine Erfahrung gemacht? Benutze die Qt version 4.6.3 und folgende make config:

Code: Alles auswählen

#
# qmake configuration for win32-msvc2008
#
# Written for Microsoft VC2005.NET
#

MAKEFILE_GENERATOR      = MSVC.NET
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=1500 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_DEBUG      = -Zi -MTd
QMAKE_CFLAGS_YACC       =
QMAKE_CFLAGS_LTCG       = -GL

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_DEBUG    = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC     = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG     = $$QMAKE_CFLAGS_LTCG
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
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       = opengl32.lib glu32.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        = .vcproj
VCSOLUTION_EXTENSION    = .sln
VCPROJ_KEYWORD  = Qt4VSv1.0
load(qt_config)
Hoffe Ihr koennt mir da weiterhelfen.

Andy[/quote]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es müssen schon alle verwendeten libs mit /MT übersetzt werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Andy2211
Beiträge: 65
Registriert: 29. September 2008 23:02

Beitrag von Andy2211 »

Hallo,
ich verwende nur die Qt - Lib, die müsste ja durch Änderung zu MT in der config file komplett mit MT gebaut werden?
Meine Applikation baue ich ebenfalls mit /MT.

Oder habe ich was übersehen?

Gruß,
Andy
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wird das Executable wirklich mit MT übersetzt? Was sagt die Debug-Version? Was der DependencyWalker? Dort dürfte nirgends msvcrtXX.dll auftauchen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Andy2211
Beiträge: 65
Registriert: 29. September 2008 23:02

Beitrag von Andy2211 »

Bin gerade dabei die Library nochmal neu zu installieren. Die Applikation wird wirklich mit /MT gebaut, läuft dann auch auf anderen Computern ohne die Libraries. Mittendrin, wenn das Programm läuft kommt dann mal dieses Heap Problem, welches bei g++ und der originalen MD Lib nicht auftaucht.

Habe auch schon Pc Lint, Intel Memory Checker, Coverity laufen lassen und keine Fehler im Code mehr gefunden.

Werde nacher dann gleich nochmal kontrollieren, welche Libs beim Starten der Anwendung geladen werden.

Gruß,
Andy
Andy2211
Beiträge: 65
Registriert: 29. September 2008 23:02

Beitrag von Andy2211 »

Hallo,
die MSVCRTs werden nicht mit geladen. Woran könnte das dann noch liegen? Ich hatte schonmal ein ähnliches Problem mit dem OpenFileDialog, da kam auch aus heiterem Himmel ein Fehler...

Habe es jetzt vorläufig gelöst indem ich den g++ Compiler verwende.

Viele Grüße,
Andy
Antworten