Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: tomík 04. 04. 2018, 19:14:44
-
Dobrý den. Mám problém s knihovnou libstdc++-6.dll. Program se přeloží bez chyb, ale nelze jej spustit. Hlásí, že nemůže najít v stupní bod procedury __gxx_personality_v0 a _ZdlPvj v souboru libstdc++-6.dll i přesto, že je umístěna ve stejné složce jako program :( . Zkoušel jsem i několik verzí, ale s žádnou to nefunguje. Pokud, ale knihovnu přilinkuju staticky všechno funguje jak má a program se spustí. Jenom je jeho velikost větší. Píšu to v Qt a navíc to překládám v linuxu pro windows (mingw-w64-6.3.0-i686). V tom cross překladu problém nevidím, spíše je špatně přilinkovaná ta knihovna. Nevíte kde by mohl být problém? Nebude se to vyskytovat i u více knihoven?
-
To, že problém není v cross překladu je jen tvůj názor nebo máš vyzkoušené i jiné alternativy ?
-
Uplne se to rict neda, ale trochu to vypada, ze linkujes s necim jinym, nez pak mas k dispozici.
-
Když dám přeložit program jen v C++ (přes mingw v linuxu) tak taky vyžaduje libstdc++ ale ne ty problémové funkce. Takže to lze bez problému spustit. Když to v linuxu přeložím přes g++, vyžaduje to libstdc++so.6 a je to linuxová binárka a taky funguje. Problém je asi při linkování knihovny v Qt. Knihovnu libstdc++ mám verzi 6.0.21. Myslíte že linkuju se špatnou verzí knihovny, nebo mingw?
-
Nemůže to být tohle? https://stackoverflow.com/questions/18668003/the-procedure-entry-point-gxx-personality-v0-could-not-be-located
The reason why this happens is because there can be a libstdc++-6.dll also in the WINDOWS\System32 directory (or in some other location where it can be found via PATH). Especially when you use different versions of MingW. So the solution is either to change the environment PATH variable in such a way that your MingW\bin directory is before the Windows system directory, replace the existing version with the newer one or copy the dll to the exectuable folder.
A jestli si myslíš, že adresář s programem má přednost před systémovou cestou, tak to nemusí být pravda, aby se v tom prase vyznalo: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
-
Uplne se to rict neda, ale trochu to vypada, ze linkujes s necim jinym, nez pak mas k dispozici.
Stretol som sa s este jednou pricinou, ako Vasa (ina kniznica pri kompilacii a linkovani)
A sice kompilacia c++ kodu cez gcc a nie cez g++
-
Kompilátor se v linuxu jmenuje: i686-w64-mingw32-g++-win32 gcc version 6.3.0 20170516 (GCC) , takže by to mohl být g++. Ještě jsou tam další: i686-w64-mingw32-c++-win32 a i686-w64-mingw32-cpp-win32. Je pravda, že ve win mám CodeBlocks a v PATH je další libstdc++-6.dll (MinGW z CB).
-
Nejlepší by bylo zjistit, jakou knihovnu si to linkuje a jakou si to pak používá. Pomoct může třeba: http://dependencywalker.com/ a pak se uvidí. Jinak to je střílení naslepo.
-
Knihovna QtGui4.dll využívá funkci __gxx_personality_v0 na (asi adrese, hint) 4052 (0x0FD4), ale můj program ji hledá na 5187 (0x1443). Mám ještě dll knihovnu z linuxu (/usr/lib/gcc/i686-w64-mingw32/6.3-win32/libstdc++-6.dll) a v té je funkce na 5187 tam kde ji můj program hledá, ale QtGui4.dll ji na této pozici nezná. Budu muset mít jinou knihovnu v linuxu nebo ve win?
-
Odkud máš ty Qtčka? Pokud jsou Qt přeložená jinou verzí MinGW než ta tvoje aplikace, mohlo by se o takto rozbít. S cross-kompilací Win32 binárek na Linuxu zkušenosti nemám ale i nativně na Windows to umí být s MinGW solidní divočina, pokud potřebuješ linkovat více různých knihoven...
-
Qt win: https://download.qt.io/official_releases/qt/4.8/4.8.7/
soubor: qt-opensource-windows-x86-mingw482-4.8.7.exe
mingw v linuxu: g++-mingw-w64-i686_6.3.0-18+19.3+b3_i386
Qt version 4.8.7 i586
https://wiki.qt.io/MinGW píšou tam že pro verzi 4.8.7 je mingw 4.8.2
g++-mingw-w64-i686_4.8.2-10ubuntu2+12_i386 , ale s tím mi to nejde přeložit, nemůže nalézt algorithm.h. Třeba ještě pohledat jiný balíček mingw4.8.2.
-
Mohl bych zkusit zkompilovat Qt pod mingw 6.3.0 a pak by to mohlo snad fungovat bez problému. Stáhnul bych qt-everywhere-opensource-src-4.8.7.zip a zkusil, jestli to vůbec půjde. Verze mingw 4.8.2 je k dispozici v Ubuntu 14.04 https://mingw-w64.org/doku.php/download, právě tuhle verzi jsem zkusil, ale s ní mi to nejde (nemůže najít soubory). Mohl bych se ještě pohrabat v té verzi 4.8.2 a zjistit kde je problém.
-
Mingw verze 4.8.2 nemůže najít při kompilaci části QT, konkrétně v souboru qglobal.h knihovnu algorithm, verze 6.3.0 s tím problém nemá :o
guest@porteus:~/Dokumenty/Software/src/ComplexNum$ make
make -f Makefile.Release
make[1]: Vstupuje se do adresáře „/home/guest/Dokumenty/Software/src/ComplexNum“
/usr/lib/qt/bin/uic complex.ui -o ui_complex.h
/usr/lib/qt/bin/uic mainwindow.ui -o ui_mainwindow.h
i686-w64-mingw32-g++ -c -pipe -O2 -fexceptions -mthreads -Wall -Wextra -fno-rtti -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NO_DYNAMIC_CAST -I'/opt/qt4-win32-dev/include/QtCore' -I'/opt/qt4-win32-dev/include/QtGui' -I'/opt/qt4-win32-dev/include' -I'.' -I'/opt/qt4-win32-dev/include/ActiveQt' -I'release' -I'.' -I'/opt/mingw4.8.2-win32-dev/i686-w64-mingw32/include' -I'/usr/lib/qt/mkspecs/win32-x-g++' -o release/main.o main.cpp
In file included from /opt/qt4-win32-dev/include/QtCore/qglobal.h:1:0,
from /opt/qt4-win32-dev/include/QtCore/../../src/corelib/global/qnamespace.h:45,
from /opt/qt4-win32-dev/include/QtCore/qnamespace.h:1,
from /opt/qt4-win32-dev/include/QtCore/../../src/corelib/kernel/qobjectdefs.h:45,
from /opt/qt4-win32-dev/include/QtCore/qobjectdefs.h:1,
from /opt/qt4-win32-dev/include/QtCore/../../src/corelib/kernel/qobject.h:47,
from /opt/qt4-win32-dev/include/QtCore/qobject.h:1,
from /opt/qt4-win32-dev/include/QtCore/../../src/corelib/kernel/qcoreapplication.h:45,
from /opt/qt4-win32-dev/include/QtCore/qcoreapplication.h:1,
from /opt/qt4-win32-dev/include/QtGui/../../src/gui/kernel/qapplication.h:45,
from /opt/qt4-win32-dev/include/QtGui/qapplication.h:1,
from /opt/qt4-win32-dev/include/QtGui/QApplication:1,
from main.cpp:1:
/opt/qt4-win32-dev/include/QtCore/../../src/corelib/global/qglobal.h:68:21: fatal error: algorithm: Adresář nebo soubor neexistuje
#include <algorithm>
^
compilation terminated.
Makefile.Release:136: návod pro cíl „release/main.o“ selhal
make[1]: *** [release/main.o] Chyba 1
make[1]: Opouští se adresář „/home/guest/Dokumenty/Software/src/ComplexNum“
Makefile:34: návod pro cíl „release“ selhal
make: *** [release] Chyba 2
Nevíte prosím co to přesně znamená? Nejvíce mě udivuje že u verze 6.3.0 se tohle neděje. Ta provede stejný příkaz
make -f Makefile.Release
make[1]: Vstupuje se do adresáře „/home/guest/Dokumenty/Software/src/ComplexNum“
i686-w64-mingw32-g++-win32 -c -pipe -O2 -fexceptions -mthreads -Wall -Wextra -fno-rtti -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NO_DYNAMIC_CAST -I'/opt/qt4-win32-dev/include/QtCore' -I'/opt/qt4-win32-dev/include/QtGui' -I'/opt/qt4-win32-dev/include' -I'.' -I'/opt/qt4-win32-dev/include/ActiveQt' -I'release' -I'.' -I'/opt/mingw4.8.2-win32-dev/i686-w64-mingw32/include' -I'/usr/lib/qt/mkspecs/win32-x-g++' -o release/main.o main.cpp
A je to v pořádku.