Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
-
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
-
Ten vypis dej na pastebin, stahovat zip s textakama se nikomu, kdo by teoreticky mohl poradit, chtit nebude...
-
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)
-
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í
objdump -p program.exe | grep dll
(je potřeba mít nainstalované MinGW a MSYS nebo Cygwin)
-
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/
-
myslím že knihovny nechybí ty jsou ok ale tdy je výpis:
$ 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
-
vypis stracent:
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,
-
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.
-
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.
-
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?
-
myslím že knihovny nechybí ty jsou ok ale tdy je výpis:
$ 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.
-
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...
-
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
-
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.
-
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.
-
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)