web-dev-qa-db-fra.com

"Symbole externe non résolu __except_handler4_common" dans Visual Studio 2015

Je suis en train de compiler une application Visual Studio 6.0 C++ héritée dans Visual Studio 2015 et j'ai rencontré cette erreur. La recherche sur le net n'a donné aucune information utile.

Symbole externe non résolu LNK2019 __except_handler4_common référencé dans la fonction __except_handler4 (MSVCRT.lib)

Je comprends que quelque part dans le code fait référence à une méthode qui n’est plus (?) Présente dans les versions actuelles de MSVCRT. Existe-t-il un indicateur de solution de contournement/compilateur pour cela?

13
Mr. Awesome

Le message d'erreur indique en fait que la fonction __except_handler4, définie dans MSVCRT.LIB, fait référence au symbole non défini __except_handler4_common. Ce n'est donc pas votre code qui fait la référence à cette référence, c'est le code de Visual Studio 2015.

Le symbole __except_handler4_common est défini dans vcruntime.lib. Ce fichier devrait être automatiquement lié. Je ne sais pas pourquoi. Avez-vous sélectionné la bibliothèque d'exécution statique dans les options du projet ("Multi-threaded (/ MT)"), puis avez-vous ajouté manuellement MSVCRT.LIB (composant de la bibliothèque d'exécution dynamique C)?

14
Ross Ridge

Dans votre projet de bibliothèque, cochez Propriétés -> C/C++ -> Génération de code -> Bibliothèque d'exécution

Il y a des chances qu'il soit réglé sur "DLL de débogage multi-thread" (/ MDd).

Changez-le en "Multi Threaded Debug" (/ MTd) et reconstruisez-le.

3
JasonDiplomat

Pour moi, je me liais aux objets d'un projet statique à partir d'un test unitaire non statique. J'ai essayé de définir le test unitaire sur une construction statique, mais le compilateur (VC++ 2015) a alors reçu l'erreur An internal error has occurred in the compiler. J'ai fini par définir le projet principal et le projet de test unitaire sur "Utiliser MFC dans une DLL partagée", puis cela a fonctionné.

3
Michael

La raison de cette erreur dépend.

Pour moi, "libcmt.lib" et "libcmtd.lib" étaient explicitement répertoriés parmi les entrées de l'éditeur de liens, plutôt qu'en le sélectionnant dans le champ "Bibliothèque d'exécution" de l'interface graphique.

0
Serge Rogatch