Подтвердить что ты не робот

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

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


Я продолжаю получать эту ошибку, если я хочу запустить приложение Irrlicht С++ Console в 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. Это нормально?

Кнопка Auto-detect также предлагает путь выше.

4b9b3361

Ответ 1

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

  • Перейдите в свою папку MinGW (должен быть C:\MinGW)
  • Откройте папку bin.
  • Должен быть файл libstdС++ - 6.dll
  • Скопируйте его в тот же каталог, что и ваш исполняемый файл.

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

Ответ 2

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

Ответ 3

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

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

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

  • basic_string|char_traits... - для С++ 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, которая окажется в системном пути поиска.

(Обновление 2019 В наши дни я склонен использовать статические ссылки, потому что развертывание файла большего размера представляет собой меньшую проблему, чем застревание в адском DLL).

Смотрите также:

Ответ 4

Когда я проанализировал это в моем случае, я понял, что в конфигурации системного пути есть еще 2 версии libstdc ++ - 6.dll. Один находится в mingw64, а другой в postgres.

Проблема в том, что они не одинаковы, их размеры тоже разные.

Мое решение простое:
Я перемещаю вниз версию postgres ниже версии mingw64. И это работает отлично.

Ответ 5

copy libstdС++ - 6.dll найдено в mingw\bin для windows\system32 удачи

Ответ 6

the procedure entry point __gxx_personality_v0 could not be located in the 
dynamic link library

Когда у меня возникла ошибка компоновщика через #include <vector>, я скопировал файл libstdc++-6.dll из MinGW\bin в Windows\SysWOW64, потому что копирование файла в WINDOWS\System32 не работало. Я подозреваю, что эта конкретная ошибка вызвана несоответствием версии битовой системы Windows между IDE Codelite и компилятором MinGW. Я должен был установить MinGW-w64 и установить его в качестве пути в IDE, но вместо этого на моем диске ОС (C :) есть mingw32.