Errores de símbolo externo sin resolver al cambiar de la biblioteca de compilación a exe o dll

StackOverflow https://stackoverflow.com/questions/168232

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy creando una aplicación como biblioteca, pero para asegurarme de que puedo obtener el resultado que me gustaría, lo cambié para producir un exe. Tan pronto como lo hice, recibí varios errores sobre símbolos externos sin resolver.

Al principio pensé que no tenía una ruta establecida en la biblioteca de terceros a la que hacía referencia, así que agregué la carpeta a mi variable de ruta e incluso la agregué a mis archivos de inclusión, referencias y fuente, solo para asegurarme de que tenía todos los caminos.

Todavía recibo el error:

  

error LNK2019: externo no resuelto   símbolo " __ declspec (dllimport) public:   hoyo estatico       __cdecl xercesc_2_8 :: XMLPlatformUtils :: Initialize (char   const * const, char const *   const, clase xercesc_2_8 :: PanicHandler   * const, clase xercesc_2_8 :: MemoryManager *   const, bool) "   (__imp_? Inicializar @ XMLPlatformUtils @ xercesc_2_8 @@ SAXQBD0QAVPanicHandler @ 2 @ QAVMemoryManager @ 2 @ _N @ Z)   referenciado en la función " void __cdecl   xsd :: cxx :: xml :: initialize (void) "   (? inicializar @ xml @ cxx @ xsd @@ YAXXZ)

La razón por la que lo pregunto aquí es porque en Visual Studio, cuando lo construí como una biblioteca, no recibí estos errores, pero como dll y exe, sí.

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

Al crear una biblioteca, el vinculador no necesita resolver símbolos importados. Eso sucede solo cuando comienza a vincular archivos de objetos y bibliotecas.

Es por eso que solo comenzó a ver el error al construir un ejecutable.

De hecho, en VC2008 (y 2005, si mal no recuerdo), use las propiedades del proyecto - > Linker - > Entrada - > Dependencias adicionales. Las bibliotecas que necesita deben estar separadas por espacios (impar, ¿eh?)

¡Buena suerte!

Otros consejos

También debe especificar que desea vincular en particular esa biblioteca. Las rutas de enlace simplemente le dicen al vinculador dónde están los datos que necesita encontrar, no qué buscar. También deberá especificar que se está vinculando con la biblioteca en cuestión (¿xerces?).

Desafortunadamente, no sé cómo especificar esto en MSVC, pero probablemente esté en alguna parte bajo 'Opciones de vinculador'.

Como dijo @coppro, debe especificar que desea vincular con esa biblioteca. Cuando construye un EXE o DLL, se ejecuta un vinculador, y necesita encontrar todas las funciones que está utilizando, pero para construir una biblioteca, se ejecuta el bibliotecario y no tiene que resolver todas las referencias de funciones (pero cuando usas esa lib en un EXE, tendrás que volver a hacerlo).

Vaya a las opciones del proyecto, Opciones del vinculador, Entrada y enumere la biblioteca que define la función que falta (xerces.lib?) en Rutas de biblioteca adicionales. Es posible que deba agregar su ubicación en Rutas de biblioteca adicionales.

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