2015-08-06 26 views
10

Sto compilando un'applicazione legacy Visual Studio 6.0 C++ in Visual Studio 2015 e ho riscontrato questo errore e la ricerca nella rete non ha prodotto alcuna informazione utile."Simbolo esterno non risolto __except_handler4_common" in Visual Studio 2015

LNK2019 non risolti simbolo __except_handler4_common esterno si fa riferimento in funzione __except_handler4 (MSVCRT.lib)

Capisco che da qualche parte nel codice fa riferimento a un metodo non (?) Presente nelle attuali versioni di MSVCRT. C'è un flag workaround/compilatore per questo?

risposta

8

Il messaggio di errore sta effettivamente dicendo che la funzione __except_handler4, definita in MSVCRT.LIB, fa riferimento al simbolo non definito __except_handler4_common. Quindi non è il tuo codice a fare questo riferimento, è il codice di Visual Studio 2015.

Il simbolo __except_handler4_common è definito in vcruntime.lib. Questo file dovrebbe essere automaticamente collegato. Non sono sicuro del perché non lo fosse. Hai selezionato la libreria di runtime statica nelle opzioni di progetto ("Multi-threaded (/ MT)"), ma aggiungi manualmente MSVCRT.LIB (parte della libreria di runtime C dinamica)?

+2

Grazie, Ross. Molto apprezzato. La directory vcruntime.lib è inclusa nei percorsi della mia libreria (sono stati aggiunti/importati durante la conversione del progetto Visual Studio 2015 da VC++ 6.0) ma gli errori fanno sembrare (per me) che non sia collegato per qualche motivo. Se aggiungo vcruntime.lib a "Dipendenze aggiuntive", l'errore scompare, ma non comprendo pienamente il motivo per cui ciò si verificherà. –

+1

Questo mi ha indirizzato nella giusta direzione. Ho avuto un errore simile, credo. Abbiamo un vecchio eseguibile C++ che viene generato e utilizzato nella nostra applicazione. Quando ho provato a costruire in modalità di rilascio, ottengo 80 errori di compilazione, simili agli errori descritti sopra. Alla fine ho controllato la pagina Linker-> Input-> Additional Dependencies nelle proprietà del mio progetto. Per qualche motivo qualcuno ha aggiunto msvcrt.lib alla proprietà "Ignora librerie predefinite specifiche". Non ho idea del perché, ma ho rimosso quello e voilà, è stato realizzato senza rilascio. – Chadley08

3

Per me, stavo collegando gli oggetti di un progetto statico a un test di unità non statiche. Ho provato a impostare il test dell'unità su build statica, ma il compilatore (VC++ 2015) ha ricevuto l'errore An internal error has occurred in the compiler. Ho finito per impostare sia il progetto principale che il progetto di unit test su "Usa MFC in una DLL condivisa", e poi ha funzionato.

2

Nel progetto della libreria, controllare Proprietà -> C/C++ -> Code Generation -> Libreria di runtime

Le probabilità sono che è impostato su "Multi Threaded Debug DLL" (/ MDD).

Cambiarlo in "Multi threaded debug" (/ MTd) e ricostruire.

Problemi correlati