Domanda

Sto creando un'applicazione come libreria, ma per essere sicuro di poter ottenere l'output che mi piacerebbe, l'ho passato per produrre un exe. Non appena l'ho fatto, ho ricevuto diversi errori sui simboli esterni non risolti.

Inizialmente pensavo di non avere un percorso impostato nella libreria di terze parti a cui stavo facendo riferimento, quindi ho aggiunto la cartella alla mia variabile di percorso e l'ho persino aggiunta ai miei file include, reference e source, solo per essere sicuro di avere tutti i percorsi.

Ricevo ancora l'errore:

  

errore LNK2019: esterno non risolto   simbolo " __ declspec (dllimport) pubblico:   vuoto statico       __cdecl xercesc_2_8 :: XMLPlatformUtils :: Initialize (char   const * const, char const *   const, classe xercesc_2_8 :: PanicHandler   * const, classe xercesc_2_8 :: MemoryManager *   const bool) "   (__Imp_? Inizializzare @ @ XMLPlatformUtils xercesc_2_8 @@ SAXQBD0QAVPanicHandler @ 2 @ QAVMemoryManager @ 2 @ _N @ Z)   indicato nella funzione "void __cdecl   xsd :: cxx :: XML :: initialize (vuoto) "   (? Inizializzare @ xml @ @ cxx XSD @@ YAXXZ)

Il motivo per cui lo sto chiedendo qui è perché in Visual Studio, quando l'ho creato come libreria, non ho riscontrato questi errori, ma come dll ed exe, lo faccio.

Qualcuno ha qualche pensiero?

È stato utile?

Soluzione

Costruendo una libreria, il linker non deve risolvere i simboli importati. Ciò accade solo quando inizia a collegare insieme file di oggetti e librerie.

Ecco perché hai iniziato a vedere l'errore solo quando hai creato un eseguibile.

In effetti, in VC2008 (e nel 2005, se ricordo bene), usa le proprietà del progetto - > Linker - > Input - > Dipendenze aggiuntive. Le librerie di cui hai bisogno devono essere separate da spazi (dispari, ehi?)

Buona fortuna!

Altri suggerimenti

Devi anche specificare che desideri collegarti a quella libreria in particolare. I percorsi dei collegamenti indicano semplicemente al linker dove sono i dati che devi trovare, non cosa cercare. Dovrai anche specificare che stai collegando alla libreria in questione (xerces?).

Sfortunatamente, non so come specificarlo in MSVC, ma probabilmente è da qualche parte in "Opzioni linker".

Come diceva @coppro, è necessario specificare che si desidera collegarsi a quella libreria. Quando si crea un file EXE o DLL, viene eseguito un linker e deve trovare tutte le funzioni che si stanno utilizzando, ma per creare una libreria, viene eseguito il bibliotecario e non è necessario risolvere tutti i riferimenti di funzione (ma quando usi quella lib in un EXE, dovrai, di nuovo).

Quindi vai alle opzioni del progetto, Opzioni linker, Input ed elenca la libreria che definisce la funzione mancante (xerces.lib?) in Percorsi libreria aggiuntivi. Potrebbe essere necessario aggiungere la sua posizione in Percorsi libreria aggiuntivi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top