Примечание редактора: Сообщения об ошибках, похожие на «Точка ошибки процедуры» _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
, Это нормально?
Кнопка автоопределения также предлагает путь выше.
У меня тоже была эта проблема. Это исправило это для меня:
Это должно работать …
Причина этого заключается в том, что может быть libstdc++-6.dll
также в WINDOWS\System32
каталог (или в каком-то другом месте, где его можно найти через PATH). Особенно, когда вы используете разные версии MingW. Таким образом, решение заключается в том, чтобы изменить окружающую среду PATH
переменная таким образом, что ваш MingW\bin
каталог находится перед системным каталогом Windows, замените существующую версию на новую или скопируйте dll в папку execuable.
Эти ошибки вызваны несовпадающими библиотеками 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, которая оказывается в системном пути поиска.
скопировать libstdc ++ — 6.dll, найденный в папке mingw \ bin, в windows \ system32
удачи