2008-12-10 6 views
1

Je reçois une erreur lors du portage de ma demande de VC6 à Visual Studio 2005.erreur Linker après le portage C++ application à partir VC6 à VS2005

Est-ce que quelqu'un a une idée ce que cela signifie?

mfcs80.lib (dllmodul.obj): erreur LNK2005: _DllMain @ 12 déjà défini dans MSVCRT.lib (dllmain.obj)

+0

Je reçois une erreur lors de la liaison, ce que je n'ai pas obtenu en vc6, –

+0

Cette question est à peine tolérable en raison de la grande édition de Rich B. La question est très localisée. – mmcdole

+0

Désolé de demander, mais pourquoi voudriez-vous passer d'une technologie de 10 ans à une technologie encore plus ancienne? –

Répondre

2

De http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652

A LNK2005 erreur se produit lorsque la bibliothèque CRT et les bibliothèques MFC sont liés dans le mauvais ordre dans Visual C++

Parce que

Les bibliothèques CRT utilisent la liaison externe faible pour la nouvelle, supprimer et fonctions DllMain. Les bibliothèques MFC contiennent également des fonctions new, delete et DllMain . Ces fonctions nécessitent que les bibliothèques MFC soient liées avant que la bibliothèque CRT soit liée.

Alors

Il y a deux façons de résoudre ce problème . La première solution implique forçant l'éditeur de liens à lier les bibliothèques dans le bon ordre. La deuxième solution vous permet de trouver le module qui cause le problème et le corriger.

Soit

force Linker Pour créer un lien Bibliothèques Ordre correct

  1. Dans le menu Projet, cliquez sur Paramètres.
  2. Dans la vue Paramètres de la boîte de dialogue Paramètres du projet, cliquez sur et sélectionnez la configuration du projet pour laquelle les erreurs de liaison sont détectées en .
  3. Dans l'onglet Lien, sélectionnez Entrée dans la zone de liste déroulante Catégorie.
  4. Dans la zone Ignorer les bibliothèques, insérez les noms de bibliothèques (par exemple, Nafxcwd.lib; Libcmtd.lib).

    Remarque L'équivalent de la ligne de commande de l'éditeur de liens dans/NOD :.

  5. Dans la zone Modules objet/bibliothèque, insérez les noms de bibliothèques. Vous devez vous assurer que ceux-ci sont répertoriés dans l'ordre et que les deux premières bibliothèques dans la ligne (par exemple, Nafxcwd.lib Libcmtd.lib).

Pour définir cette option dans Visual C++ .NET, lisez la section "Configuration projet Visual C++ Propriétés" rubrique d'aide en ligne.

Ou

Localisez et corriger le module problème Pour afficher l'ordre de lien de la bibliothèque actuelle, suivez ces étapes:

  1. Dans le menu Projet, cliquez sur Paramètres.
  2. Dans la vue Paramètres de la boîte de dialogue Paramètres du projet, cliquez sur et sélectionnez la configuration du projet pour laquelle les erreurs de liaison sont détectées en .
  3. Sous l'onglet Lien, tapez/verbose: lib dans la zone Options du projet .
  4. Recréez votre projet. Les bibliothèques seront listées dans la fenêtre de sortie pendant le processus de liaison.
2

Je suis sûr qu'il ya un certain nombre de raisons cela pourrait se produire - le pire que j'ai jamais trouvé était en essayant d'intégrer un certain nombre de bibliothèques statiques (le nôtre) qui étaient à l'origine DLLS (en fait, nous construire les projets en tant que bibliothèques statiques DLL &). Notre DLL C++/CLI utilisait les versions statiques de ces bibliothèques (pour éviter les problèmes de dépendance DLL qui provoquaient des problèmes de chargement ASP.NET lorsque la DLL C++/CLI était utilisée) et voyait initialement la même erreur de l'éditeur de liens.

Le problème s'est avéré être l'utilisation de AFX_MANAGE_STATE (AfxGetStaticModuleState()) macro nécessaire lorsque le code a été généré en tant que DLL, mais pas réellement nécessaire pour l'appel de bibliothèque statique.

Pour résoudre ce problème, j'ai fini par ajouter le code suivant au fichier stdafx.h de chaque projet.

#ifdef OMUTILITIES_LINK_STATIC 
    #undef AfxGetStaticModuleState 
    #define AfxGetStaticModuleState AfxGetModuleState 
#endif 

Ceci, bien sûr, ne peut pas être votre problème spécifique. Mais la façon dont je l'ai finalement compris était en activant l'option/VERBOSE pour l'éditeur de liens et en voyant qui, quoi, où & quand il tirait dans les bibliothèques d'exécution. (Propriétés du projet/Propriétés de configuration/Lieur/Afficher la progression dans vs2005)

0

Vous pouvez définir l'entrée de l'éditeur de liens pour ignorer la bibliothèque gênante dans les propriétés du projet, mais cela peut ou non fonctionner.

Questions connexes