точка входа в процедуру __gxx_personality_v0 не может быть найдена

Примечание редактора: Сообщения об ошибках, похожие на «Точка ошибки процедуры» _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_ не может быть расположен в библиотеке динамических ссылок libstdc++-6.dll«имеют одинаковую причину и применяются те же решения.


Я получаю эту ошибку, если хочу запустить консольное приложение Irrlicht C ++ в Windows:

the procedure entry point __gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll

Я использую CodeBlocks v12.11 с MinGW и движком Irrlicht v1.8. Я настроил это правильно. На моем компьютере также установлен Qt с MinGW. Возможно ли, что есть конфликт?

Это исходный код:

#include <irrlicht.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

int main() {
IrrlichtDevice *device = createDevice( video::EDT_OPENGL);

if (!device)
return 1;

IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();

guienv->addStaticText(L"Hello World", core::recti(10, 10, 100, 30));
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

while(device->run()) {
driver->beginScene(true, true, SColor(250, 190, 1, 2));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}

device->drop();
return 0;
}

Я настроил компилятор C:\CodeBlocks\MinGW,
Каждый файл (некоторые из них показаны в настройках) находится в bin, Кроме make.exe, Это нормально?

Кнопка автоопределения также предлагает путь выше.

25

Решение

У меня тоже была эта проблема. Это исправило это для меня:

  1. Перейдите в папку MinGW (должен быть C: \ MinGW)
  2. Откройте папку bin.
  3. Там должен быть файл с именем libstdc ++ — 6.dll
  4. Скопируйте его в тот же каталог, что и ваш исполняемый файл.

Это должно работать …

49

Другие решения

Причина этого заключается в том, что может быть libstdc++-6.dll также в WINDOWS\System32 каталог (или в каком-то другом месте, где его можно найти через PATH). Особенно, когда вы используете разные версии MingW. Таким образом, решение заключается в том, чтобы изменить окружающую среду PATH переменная таким образом, что ваш MingW\bin каталог находится перед системным каталогом Windows, замените существующую версию на новую или скопируйте dll в папку execuable.

15

Эти ошибки вызваны несовпадающими библиотеками DLL.

Для сообщений в вопросе это неверная версия libstdc++-6.dll , но вы можете увидеть сообщение, ссылающееся на другие библиотеки DLL, которые были созданы с различными версиями gcc для Windows; и даже упоминая .exe файл запускается.

Конкретные изменения здесь:

  • basic_string|char_traits... — для C ++ 11 произошло критическое изменение ABI на std::string
  • __gxx_personality_v0 — Я считаю, что это связано с тем, какая реализация исключения используется (gcc для Windows может использовать различные из Dwarf2, Win32-SEH, SJLJ и т. Д.)

Вы увидите это сообщение, если приложение, скомпилированное одним набором компиляторов, ссылается на DLL, скомпилированное другим вариантом.

Чтобы просмотреть список найденных DLL-файлов для исполняемого файла, вы можете открыть исполняемый файл в Dependency Walker и включить опцию «Полный путь». Другой способ заключается в использовании ldd если у вас установлен Cygwin или аналогичный.

Самый обычный виновник libstdc++-6.dll, К сожалению, изменение ABI не было связано с изменением номера версии libstdc ++; и это не поведение по умолчанию для режима исключения, чтобы появиться в имени файла. (Вы можете изменить эти вещи, если строите MinGW самостоятельно).

Я бы порекомендовал проверить каждую DLL, найденную Dependency Walker, и убедиться, что она находит те из той же сборки MinGW, с которой вы создали свой исполняемый файл. libgcc-s-*.dll это еще один, чтобы посмотреть.

На самом деле я бы порекомендовал не иметь ни одной из этих библиотек DLL в системном пути. Для разработки я загружаю PATH в DLL для того же компилятора, с которым я компилирую; и для развертывания я связываю файлы DLL в том же каталоге, что и каждый исполняемый файл, потому что поиск DLL во время выполнения всегда сначала проверяет этот каталог. Тогда нет никаких шансов найти старую DLL, которая оказывается в системном пути поиска.

2

скопировать libstdc ++ — 6.dll, найденный в папке mingw \ bin, в windows \ system32
удачи

0
По вопросам рекламы [email protected]