2009-08-19 3 views
3

Quel (s) paramètre (s) dans un projet Visual Studio 2005 peut entraîner la génération de ne pas ajouter l'argument/dll à la ligne de commande de l'éditeur de liens?Visual C++ 2005 n'ajoute pas d'argument/dll pour l'éditeur de liens

Contexte:

Nous avons un grand projet VC6 que je suis le portage vers VC 2005. Ce projet contient un certain nombre de DLL d'extension MFC, et je suis en cours d'exécution dans l'avertissement de linker suivant quand je lance un build:

avertissement LNK4086: entrypoint '_WinMainCRTStartup' n'est pas __stdcall avec 12 octets d'arguments; l'image peut ne pas s'exécuter

La référence à _WinMainCRTStartup est hautement suspecte car il s'agit d'une DLL (qui ne devrait pas avoir de fonction _WinMainCRTStartup). Une recherche des sources indique qu'il n'y a pas de telle fonction définie, donc ma conclusion est que cela nous est fourni par l'éditeur de liens.

Examen des arguments de ligne de commande linker.exe montre le problème (je l'ai enlevé les chemins complets par souci de concision):

/OUT:"Debug\thedll.dll "/ incrémentielles/MANIFESTE/MANIFESTFILE:" Mise au point \ thedll.dll.intermediate.manifest "/DEF:".\thedll.def"/DEBUG /PDB:"\Debug\thedll.pdb "/ SOUS-SYSTEME: WINDOWS/MACHINE: X86 version.lib

Il existe un argument de ligne de commande hautement critique manquant:/DLL

Si j'ajoute manuellement cet argument (en utilisant les propriétés du projet, les propriétés de configuration \ Linker \ paramètres de ligne de commande), je peux obtenir des choses à compiler correctement. Mais je me demande ce qui, dans la configuration du projet, provoque l'omission du paramètre de ligne de commande/DLL de linker.exe?

J'ai créé un projet temporaire avec une DLL d'extension, et j'ai effectué des comparaisons côte à côte des fichiers .vcproj, mais je ne vois aucun paramètre spécifique susceptible d'avoir un impact sur celui-ci.

EDIT - J'ai vérifié le paramètre Propriétés de configuration \ Général \ Paramètres par défaut du projet pour Type de configuration. Il est défini sur Bibliothèque dynamique (.dll)

EDIT2 - Apparemment, VS ignorait le réglage jusqu'à ce que je l'ajuste manuellement. rggggg

+0

Autres considérations à ce sujet: où est le paramètre qui entraîne l'inclusion de l'indicateur Linker/ICREMENTAL dans les configurations de débogage, mais qui est exclu dans la configuration Release? Peut-être que mon problème est au même endroit ... –

+0

Wired J'ai rencontré le même problème maintenant dans l'un des projets que nous gardons encore à VS2005. Et finalement, elle s'est résolue, j'aimerais pouvoir comprendre pourquoi elle s'est comportée comme elle l'a fait (je soupçonne quelque chose en rapport avec pch). – dashesy

Répondre

1

La première chose que je peux suggérer est de vérifier que le type de configuration du projet est défini sur Bibliothèque dynamique. Cliquez avec le bouton droit sur le projet -> Sélectionner les propriétés -> Sélectionner général -> Type de configuration.

+0

merci - J'ai vérifié celui-là (et ajouté un edit à l'OP indiquant la valeur correcte) –

+0

Je viens de le changer en EXE pour mon projet, puis de nouveau en DLL. Hit s'applique, et maintenant/DLL apparaît dans la ligne de commande. Craie jusqu'à 3 heures de temps perdu à l'algorithme de gestion des changements pauvres de M $ dans leur interface graphique. –

+0

Pour référence, voici l'article MSDN qui décrit l'argument/DLL et comment le définir: http://msdn.microsoft.com/fr-fr/library/527z7zfs% 28VS.71% 29.aspx –

0

Il semble que l'éditeur de liens souhaite créer un programme de console. Ouvrez les propriétés du projet. Sélectionnez les paramètres généraux. Sélectionnez le type de configuration Dynamic Library ici.

Questions connexes