Statická QT aplikace pro Windows

milo86

Statická QT aplikace pro Windows
« kdy: 12. 06. 2013, 09:54:37 »
Ahoj řešímproblém s kompilací projektu využívají qt lib. Potřebuji překompilovat software se static knihovnama aby bylo na windows co nejjednodušší přenášet program, ale nedaří se.
1) Zkompiloval jsem qt do static
2) z řádku spustím qmake(tu správnou qt static verzi)
3) mingw32-make
kompilace proběhne a tváří se bez problému, jen mi vyhodí 4 warnings, který se mi zobrazují i při kompilaci při dynamickým linku a není to problém(unused varable).

Můžete mi poradit jak přijít nato kde je problém, když při kompilaci nedojde k vyhození chyby a při zpuštění z win konsole to nenapíše nic.

Ještě mě napadlo že nemám nainstalovaný opengl SDK takže jsem kompilovat qt bez opengl.
« Poslední změna: 12. 06. 2013, 13:47:11 od Petr Krčmář »


milo86

Re:project QT
« Odpověď #1 kdy: 12. 06. 2013, 10:31:28 »
Chtěl jsem ještě připojit výpis ale měl moc znaků tak jsem jej poslal http://uloz.to/xUj6kJYt/vypis-kompilaci-zip jsou tam zabaleny dva soubory oba release, jedná se o výpis z kompilace jestli tam není vidět problém. Díky Milo

Re:project QT
« Odpověď #2 kdy: 12. 06. 2013, 11:44:22 »
Ten vypis dej na pastebin, stahovat zip s textakama se nikomu, kdo by teoreticky mohl poradit, chtit nebude...

milo86

Re:project QT
« Odpověď #3 kdy: 12. 06. 2013, 12:07:31 »
to je pravda díky za moudré upozornění
http://pastebin.com/sSUB7u8T
http://pastebin.com/54BwmFYc

Sten

Re:Statická QT aplikace pro Windows
« Odpověď #4 kdy: 12. 06. 2013, 14:02:22 »
Kompilace je v pořádku. Co přesně se stane, když ten program spustíš? Windows řeknou, že to nejde, nebo něco jiného?

Pokud tomu chybí nějaké DLL, tak jde najít pomocí
Kód: [Vybrat]
objdump -p program.exe | grep dll(je potřeba mít nainstalované MinGW a MSYS nebo Cygwin)


gamer

Re:Statická QT aplikace pro Windows
« Odpověď #5 kdy: 12. 06. 2013, 14:11:41 »
Pokud se výsledný exe nespustí a na terminál nic nevypíše, zkus se podívat do event logu:
http://support.microsoft.com/kb/308427
Windows někdy zapisují obskurní chyby tam.
Kdyby tam nic nebylo, tak bych zkusil strace:
http://stracent.en.softonic.com/

milo86

Re:Statická QT aplikace pro Windows to STEN
« Odpověď #6 kdy: 12. 06. 2013, 15:00:40 »
myslím že knihovny nechybí ty jsou ok ale tdy je výpis:
Kód: [Vybrat]
$ objdump -p ./Mechano.exe | grep dll
        DLL Name: FTD2XX.dll
        DLL Name: GDI32.dll
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: msvcrt.dll
        DLL Name: OLE32.dll
        DLL Name: USER32.dll
        DLL Name: WS2_32.dll
        DLL Name: libgcc_s_dw2-1.dll
        DLL Name: libstdc++-6.dll

Zde je výpis stejnej dostanu od depWalkera. to co psal gamer ještě vyzkouším. Díky

milo86

Re:Statická QT aplikace pro Windows
« Odpověď #7 kdy: 12. 06. 2013, 15:12:42 »
vypis stracent:
Kód: [Vybrat]
IntellectualHeaven (R) System Call Tracer for NT, 2K, XP, 2K3.
Copyright (C) Pankaj Garg. All rights reserved.

Tracing command: ["C:\Users\milan\Documents\src\Qt\Mechanotroj_thread\release\Mechanotroj_thread.exe"]
[T2228] GetCurrentThreadId(1433c48, 1433c20, 4, 1434268, ...) = 8b4
[T2228] GetCurrentThreadId(1433c48, 1433c20, 4, 1434290, ...) = 8b4
[T2228] GetCurrentThreadId(1433c48, 1433c20, 4, 14342b8, ...) = 8b4
[T2228] GetCurrentThreadId(1433c48, 1433c20, 4, 1433e10, ...) = 8b4
[T2228] GetCurrentThreadId(2020202, 1, 13605fc, 14342e0, ...) = 8b4
[T2228] GetCurrentThreadId(2020202, 1, 13605fc, 1434300, ...) = 8b4
[T2228] GetCurrentThreadId(2020202, 1, 13605fc, 1434320, ...) = 8b4
[T2228] GetCurrentThreadId(2020202, 1, 13605fc, 1434360, ...) = 8b4
[T2228] GetCurrentThreadId(2020202, 1, 13605fc, 14343a0, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1433e10, 28fda8, 14343e0, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1433e10, 28fda8, 1434400, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1433e10, 28fda8, 1434420, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1433e10, 28fda8, 1434440, ...) = 8b4
[T2228] GetCurrentThreadId(2020202, 1, 4, 1434460, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 1434480, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 14344a0, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 14344c0, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 14344e0, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 1434500, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 1434520, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 1434540, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 1434560, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1434460, 28fda8, 1434580, ...) = 8b4
[T2228] GetCurrentThreadId(0, 1, 28fd98, 28fe1c, ...) = 8b4
[T2228] GetSystemTime(28fd10, 1432d98, 28fd68, 0, ...) = 28fd10
[T2228] GetCurrentProcessId(1432d98, cd7480, 1434460, 99a896, ...) = 123c
[T2228] WideCharToMultiByte(0, 0, 1433a50, 53, ...) = 53
[T2228] TlsAlloc(989190, 0, 4, 0, ...) = 1a
[T2228] TlsGetValue(1a, 28fe50, 28ff18, 6fcbb9fb, ...) = 0
[T2228] TlsSetValue(1a, 1433ad0, 28ff18, 6fcbb9fb, ...) = 1
[T2228] TlsGetValue(1a, 77abe046, f398eca3, 28fc88, ...) = 1433ad0
[T2228] GetCurrentThread(1433a60, 1433a60, 1433b28, 977b39, ...) = fffffffe
[T2228] GetCurrentThreadId(1433a60, 1433a60, 1433b28, 977b39, ...) = 8b4
[T2228] GetCurrentThreadId(7efdd000, 989f6a, 28ff18, 6fcbb9fb, ...) = 8b4
[T2228] _Znwj(24, 1, 4, 0, ...) = 1434820
[T2228] __cxa_guard_acquire(fb4d98, 1434820, 172, 28ff18, ...) = 1
[T2228] __cxa_guard_release(fb4d98, 1434820, 172, 28ff18, ...) = 0
[T2228] TlsGetValue(1a, 1434834, 14348b0, 78c2a7, ...) = 1433ad0
[T2228] _Znwj(8, a, ffffffff, 0, ...) = 1434990
[T2228] _Znwj(60, 1434990, 172, 28fcc0, ...) = 14349b0
[T2228] TlsGetValue(1a, 0, 28fcbc, 1, ...)
Exception = c00000fd, Address = ff29af (first-chance!)
Exception = c00000fd, Address = ff29af (second-chance!)
Exception = c00000fd, Address = ff29af (first-chance!)
Exception = c00000fd, Address = ff29af (second-chance!)
Target process has been terminated. Exit Code = -1073741571.

moc tomu nerozumím až nato že to vyhodí chybu,

gamer

Re:Statická QT aplikace pro Windows
« Odpověď #8 kdy: 12. 06. 2013, 15:36:39 »
Kód: [Vybrat]
Exception = c00000fd
Tohle by mělo znamenat stack overflow, ale težko říct, proč se to děje. Jedině to pustit pod debuggerem a podívat se, kde se to stane.

milo86

Re:Statická QT aplikace pro Windows
« Odpověď #9 kdy: 12. 06. 2013, 16:59:20 »
ok debug mod zkusím zítra, protože jsem si zkompiloval pouze release verzi statických knihoven. Zítra dám vědět, ale je to divný že při dynamickým linku to šlape jak hodinky. Ještě mě napadlo že jsem kompiloval to qt bez podpory opengl, protože mi nejde nainstalovat winSDK. Zítra dám vědět co hlásí debug.

Ivan

Re:Statická QT aplikace pro Windows
« Odpověď #10 kdy: 12. 06. 2013, 19:29:05 »
Tohle by mělo znamenat stack overflow, ale težko říct, proč se to děje. Jedině to pustit pod debuggerem a podívat se, kde se to stane.
mingw a msvc maji ruzna ABI. Tahle chyba muze znamenat, ze nejak spatne kombinujes knihovny z ruznych kompilatoru.
(plus navic u MSVC maji i debug a release build ruzna ABI).

PS: nebylo by jednodussi vsechno kompilovat pomoci MSVC?

Sten

Re:Statická QT aplikace pro Windows to STEN
« Odpověď #11 kdy: 12. 06. 2013, 20:05:49 »
myslím že knihovny nechybí ty jsou ok ale tdy je výpis:
Kód: [Vybrat]
$ objdump -p ./Mechano.exe | grep dll
        DLL Name: FTD2XX.dll
        DLL Name: GDI32.dll
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: msvcrt.dll
        DLL Name: OLE32.dll
        DLL Name: USER32.dll
        DLL Name: WS2_32.dll
        DLL Name: libgcc_s_dw2-1.dll
        DLL Name: libstdc++-6.dll

Zde je výpis stejnej dostanu od depWalkera. to co psal gamer ještě vyzkouším. Díky

No vidím tu libgcc_s_dw2-1.dll a libstdc++-6.dll, ani jedno není zrovna běžně ve Windows. Ale jestli se to spustí a spadne to s výjimkou, bude problém nejspíš jinde.

Johnny

Re:Statická QT aplikace pro Windows
« Odpověď #12 kdy: 12. 06. 2013, 20:07:22 »
Qt5? Hahahaha, nejzákeřnější a nejblbější verze, kterou znám, když překopírujete těch cca 10 DLL knihoven, tak vám aplikace stejně nenaběhne a ani nevypíše žádné chybové hlášení.... Můžete se rozčilovat, hledat na Googlu........ No nic, nebudu chodit kolem horké kaše: Problém je v The Qt Windows platform plugin ... platforms\qwindows.dll, viz http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html, pak aplikaci spustit půjde...

milo86

Re:Statická QT aplikace pro Windows
« Odpověď #13 kdy: 13. 06. 2013, 09:33:40 »
To Sten: no ty knihovny vypadají nestandardně ale to je tím že jsem kompiloval pro mingw32
To Johnny: moc jsem nepochopil tvou radu, já všechny qt knihovny mám staticky takže vlastně žádnou dynamickou knihovnu nemám

milo86

Re:Statická QT aplikace pro Windows
« Odpověď #14 kdy: 13. 06. 2013, 10:36:53 »
No tak mi možná došlo jádro pudla, když to skompiluji s dynamickýma knihovnama tak to načítá knihovnu libglesv2.dll. Jenže při kompilaci qt jsem vypnul podporu opengl takže tento modul nemám a to znamená že by to bez toho mohlo padat.