libstdc++-6 s chybou __gxx_personality_v0

tomík

libstdc++-6 s chybou __gxx_personality_v0
« kdy: 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?


borekz

  • ****
  • 492
    • Zobrazit profil
    • E-mail
Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #1 kdy: 05. 04. 2018, 06:53:59 »
To, že problém není v cross překladu je jen tvůj názor nebo máš vyzkoušené i jiné alternativy ?

n

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #2 kdy: 05. 04. 2018, 08:53:04 »
Uplne se to rict neda, ale trochu to vypada, ze linkujes s necim jinym, nez pak mas k dispozici.

tomík

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #3 kdy: 05. 04. 2018, 09:21:24 »
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?

lopata

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #4 kdy: 05. 04. 2018, 09:47:56 »
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


Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #5 kdy: 05. 04. 2018, 10:16:36 »
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++

tomík

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #6 kdy: 05. 04. 2018, 12:11:53 »
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).

ByCzech

  • *****
  • 1 848
    • Zobrazit profil
    • E-mail
Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #7 kdy: 05. 04. 2018, 12:45:35 »
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.
« Poslední změna: 05. 04. 2018, 12:48:11 od ByCzech »

tomík

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #8 kdy: 05. 04. 2018, 13:58:14 »
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?

Neviditelný

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #9 kdy: 05. 04. 2018, 16:35:30 »
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...

tomík

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #10 kdy: 05. 04. 2018, 17:04:28 »
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.

tomík

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #11 kdy: 06. 04. 2018, 11:32:55 »
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.

tomík

Re:libstdc++-6 s chybou __gxx_personality_v0
« Odpověď #12 kdy: 07. 04. 2018, 19:33:52 »
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
Kód: [Vybrat]
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
Kód: [Vybrat]
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.