Pregunta

Estoy usando Visual C ++ 2005 Express Edition y obtengo los siguientes errores de vinculador:

19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ) referenced in function "protected: static void __cdecl std::vector<class mytype,class std::allocator<class mytype> >::_Xlen(void)" (?_Xlen@?$vector@Vmytype@@V?$allocator@Vmytype@@@std@@@std@@KAXXZ)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ)
19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z) referenced in function "public: __thiscall std::logic_error::logic_error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z)

Desactivé las excepciones en el código generado y uso antes de incluir el archivo de encabezado vectorial:

#define _HAS_EXCEPTIONS 0

Algunos resultados de Google revelaron algunas cosas, pero no " aha! " Soluciones que funcionaron para mí.

EDITAR:

Como se anotó " _HAS_EXCEPTIONS 0 " no desactiva las excepciones, per se. Lo que hace es, al menos en el archivo de encabezado vectorial, llamar a _Raise en un objeto de excepción en lugar de llamar a C ++ " lanzar " ;. En mi caso, no se puede vincular a la función _Raise del objeto de excepción ya que no estoy incluyendo la biblioteca correcta. Lo que es esa biblioteca, sin embargo, no es obvio.

¿Fue útil?

Solución

Añadiendo esta línea:

#define _STATIC_CPPLIB

antes de incluir el encabezado vectorial parece hacer el truco.

Otros consejos

El tercer error deja claro que #define the _HAS_EXCEPTIONS 0 no afecta. Ahora, podría incluir (tiene sentido, compartir código puede reducir el tamaño de su ejecutable). Eso explicaría por qué aún tiene errores si lo define antes de su inclusión de. Este tipo de definiciones se deben hacer en la configuración de su proyecto.

Tenga en cuenta que _HAS_EXCEPTIONS es una característica no compatible en Visual Studio. No desactiva las excepciones como tales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top