Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: milo86 12. 06. 2013, 09:54:37

Název: Statická QT aplikace pro Windows
Přispěvatel: milo86 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.
Název: Re:project QT
Přispěvatel: milo86 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 (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
Název: Re:project QT
Přispěvatel: Tomaskom 12. 06. 2013, 11:44:22
Ten vypis dej na pastebin, stahovat zip s textakama se nikomu, kdo by teoreticky mohl poradit, chtit nebude...
Název: Re:project QT
Přispěvatel: milo86 12. 06. 2013, 12:07:31
to je pravda díky za moudré upozornění
http://pastebin.com/sSUB7u8T (http://pastebin.com/sSUB7u8T)
http://pastebin.com/54BwmFYc (http://pastebin.com/54BwmFYc)
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: Sten 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)
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: gamer 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/
Název: Re:Statická QT aplikace pro Windows to STEN
Přispěvatel: milo86 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
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: milo86 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,
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: gamer 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.
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: milo86 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.
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: Ivan 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?
Název: Re:Statická QT aplikace pro Windows to STEN
Přispěvatel: Sten 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.
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: Johnny 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 (http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html), pak aplikaci spustit půjde...
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: milo86 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
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: milo86 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.
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: milo86 13. 06. 2013, 16:06:23
Tak statický link se mi nepodařilo rozběhnout nicméně skutečně přenos(instalační balík) funguje dle toho návodu jak pastnul johnny.  Děkuji všem za ochotu.
Název: Re:Statická QT aplikace pro Windows
Přispěvatel: Johnny 15. 06. 2013, 03:58:28
Co tohle? http://stackoverflow.com/questions/16773789/qt5-static-build-yields-failed-to-load-platform-plugin-windows (http://stackoverflow.com/questions/16773789/qt5-static-build-yields-failed-to-load-platform-plugin-windows)