c++ - libstdc - el punto de entrada al procedimiento__gxx_personality_v0 no se pudo ubicar
no se encuentra el punto de entrada del procedimiento sfml (4)
Nota del editor: Los mensajes de error similares a "El punto de error del procedimiento _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_
no se pueden ubicar en la biblioteca de vínculos dinámicos libstdc++-6.dll
" tienen la misma causa y se aplican las mismas soluciones.
Sigo recibiendo este error si quiero ejecutar mi aplicación Irrlicht C ++ Console en Windows:
the procedure entry point __gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll
Estoy usando CodeBlocks v12.11 con MinGW y el motor Irrlicht v1.8. Lo configuro correctamente. En mi computadora también hay un Qt instalado con MinGW. ¿Es posible que haya un conflicto?
Este es el código fuente:
#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;
}
Configuré el compilador en C:/CodeBlocks/MinGW
. Cada archivo (hay algunos en la Configuración) se encuentra debajo de bin
, excepto make.exe
. ¿Eso es normal?
El botón Autodetectar también sugiere la ruta anterior.
Estos errores son causados por archivos DLL no coincidentes.
Para los mensajes en la pregunta, es una versión incorrecta de libstdc++-6.dll
, pero puede ver el mensaje que hace referencia a otras DLL que se libstdc++-6.dll
con varias versiones de gcc para Windows; e incluso mencionar el archivo .exe
que se está ejecutando.
Los cambios específicos aquí son:
-
basic_string|char_traits...
- para C ++ 11 hubo un cambio ABI de última hora enstd::string
-
__gxx_personality_v0
- Creo que esto tiene que ver con qué implementación de excepciones está en uso (gcc para Windows puede usar varios de Dwarf2, Win32-SEH, SJLJ, etc.)
Verá este mensaje si una aplicación compilada por un sabor del compilador se vincula a un archivo DLL compilado por un estilo diferente.
Para ver una lista de las DLL encontradas para un ejecutable, puede abrir el ejecutable en Dependency Walker y habilitar la opción "Full Paths". Otra forma es usar ldd
si tiene instalado Cygwin o similar.
El culpable más habitual es libstdc++-6.dll
. Lamentablemente, el cambio ABI no se combinó con un cambio en el número de versión de libstdc ++; y no es el comportamiento predeterminado para que el modo de excepción aparezca en el nombre del archivo. (Puede cambiar estas cosas si construye MinGW usted mismo).
Recomendaría revisar todas las DLL encontradas por Dependency Walker y asegurarme de que encuentre las de la misma compilación de MinGW con las que construyó su ejecutable. libgcc-s-*.dll
es otra a tener en cuenta.
De hecho, recomendaría no tener ninguno de estos archivos DLL en la ruta del sistema. Para el desarrollo, cargo un PATH a los archivos DLL para el mismo compilador con el que estoy compilando; y para la implementación, incluyo los DLL en el mismo directorio que cada ejecutable, porque la búsqueda de DLL en tiempo de ejecución siempre verifica ese directorio primero. Entonces no hay posibilidad de encontrar una antigua DLL que esté en la ruta de búsqueda del sistema.
La razón por la que esto ocurre es porque puede haber una libstdc++-6.dll
también en el directorio WINDOWS/System32
(o en alguna otra ubicación donde se puede encontrar a través de PATH). Especialmente cuando usa diferentes versiones de MingW. Entonces la solución es cambiar la variable PATH
entorno de tal manera que su directorio MingW/bin
esté antes del directorio de sistema de Windows, reemplace la versión existente por la más nueva o copie el dll a la carpeta ejecutable.
Yo tuve este problema también. Esto me lo arregló:
- Vaya a su carpeta MinGW (debe ser C: / MinGW)
- Abra la carpeta bin.
- Debería haber un archivo llamado libstdc ++ - 6.dll
- Copia esto en el mismo directorio que tu ejecutable.
Eso debería funcionar...
copie libstdc ++ - 6.dll encontrado en mingw / bin a windows / system32 buena suerte