Que fait réellement L'option" Linker de dépendance de bibliothèque de lien " dans Visual Studio 2010?
Jusqu'à VS2008, vous avez paramétré vos C++ natif dépendances de projet dans le fichier solution ( Project Dependencies ...
) et si (par défaut) L'Option Linker
Properties -> Linker -> General : Link Library Dependencies = Yes
est défini, la construction de Visual Studio se liera automatiquement dans les fichiers .lib
de tous les projets (DLLs, LIBs) sur lesquels ce projet dépend sera" statiquement " lié.
côté Note: Microsoft a changé la façon dont les dépendances fonctionnaient dans VS2010 et vous êtes maintenant censés ajouter la dépendance directement au projet
Common Properties -> Framework and References : (List of depenencies)
(each lib/dll has a separate option:
Project Reference Properties -> Link Library Dependencies : True|False
ça me va. C'est pas que cette question est à propos.
(Une explication ici: Flexible Projet-pour-les Références de Projet .)
il est still possible cependant de définir les dépendances du projet au niveau de la Solution et l'option General
Linker est également still il. Toutefois, il ne fonctionne pas. Voir:
- lien dépendances de bibliothèque ne fonctionne pas?
- N'Visual Studio 2010 break "Projet" Dépendances entre les projets C++?
- Visual Studio 2010 pas autolinking bibliothèques statiques de projets qui sont des dépendances comme il se doit censés
- "mais assez curieusement, sans enlever l'ancienne interface utilisateur, ou en aucune façon indiquant qu'elle ne fonctionne plus"
et surtout voir ici (acutal question suit)
- MS Connecter Bug 586113: "Bibliothèque de liens de Dépendances" ne fonctionne pas
où Microsoft confirme que L'Option Linker ne fait pas ce que le reste de la population du monde attend d'elle, et ajoute l'explication suivante:
Merci d'avoir rapporté cette rétroaction. Le problème que vous rencontrez est de par leur conception. "Dépendance de la bibliothèque de liens" est un drapeau qui dicte seulement si oui ou non pour passer la bibliothèque comme entrée au linker. Il n' pas trouver la dépendance automatiquement. En tant que client, vous aurez pour définir le depedency manuellement comme vous le suggérez.
peut n'importe qui peut expliquer ce que cela signifie , ou plus au point: Que fait l'option" Lien de dépendance de bibliothèque " linker fait réellement dans Visual Studio 2010?
Qu'est-ce qu'un "input to the linker" qui n'est pas réellement lié censé être?
5 réponses
vous devez donner au paramètre la valeur appropriée pour apporter la clarté:
Re-Run 2017. Yay.
TL; DR
cette Option définit la valeur par défaut (a) pour le Link Library Dependecies
réel sur chaque référence de projet. Si chaque référence de projet a LinkLibraryDependecies
ensemble, alors il est en effet sans signification.
cependant, lors de l'ajout d'une nouvelle référence, par défaut (dans VS2010 et 2015) le nouvel élément <ProjectReference>
dans le fichier vcxproj
ne pas ont le jeu, de sorte que cette option est pertinente en ce qu'elle fournit la valeur par défaut pour tous les nouveaux ajouté des références, aussi longtemps que leur valeur n'est pas modifiée.
(a): vraiment doit être la même pour toutes les Configurations (Debug/Release) et les plates-formes (Win32/x64) ou les choses deviennent vraiment compliqué.
détails sanglants
Hans a souligné qu'il apparaît "1519420920 de" ne pas faire n'importe quoi dans VS2010 en tant que tel . Cependant, cela ne signifie pas qu'il n'est pas utilisé par VS/MSBuild.
l'essentiel est de savoir comment cette option est insérée dans le fichier vcxprj
et comment les valeurs par défaut fonctionnent pour le paramètre <ProjectReference>
dans le fichier msbuild.
le paramètre de la boîte de dialogue Linker indiqué ci-dessus est inséré comme suit:
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemDefinitionGroup>
<ClCompile>
...
</ClCompile>
<Link>
...
</Link>
<ProjectReference>
<LinkLibraryDependencies>This option is not used by VS 2010!</LinkLibraryDependencies>
</ProjectReference>
...
</ItemDefinitionGroup>
</Project>
et bien que apparaisse comme pour être d'une façon ou d'une autre groupé avec l'Option Link
, c'est juste là pour vous confondre.
ce que fait réellement dans un fichier vcxproj
(ou en venant d'un fichier .props
), est à définir la valeur par défaut de la Link Library Dependencies
valeur pour chaque projet dépendant de la Frameworks and References
section dans une boîte de dialogue VS2010 VC settings --
- ou dans le sous-arbre de l'VS2015 Références --
et ceci est pertinent, car lorsque vous ajoutez une nouvelle référence de projet, l'entrée par défaut dans votre fichier vcxproj
ressemblera à ceci:
...
<ItemGroup>
<ProjectReference Include="..\W32DynLib1\W32DynLib1.vcxproj">
<Project>{96be134d-acb5-....-....-....bb6fe4a7}</Project>
</ProjectReference>
</ItemGroup>
vous remarquerez que le sous-élément <LinkLibraryDependecies>true|false</..>
est absent ici: cela signifie que votre paramètre" global " sera effectivement utilisé pour définir la valeur par défaut.
si votre paramètre global est false
(ou No
), la référence du projet ne sera liée à rien. Si c'est true
, il se connectera.
de plus:
- Si ce paramètre,
LinkLibraryDependency
, est complètement absent de votre paramètres, il sera par défaut à true" 1519420920 (à partir du fichierMicrosoft.Cpp[.Common].props
dans le dossier MSBuild). - si vous avez la valeur
This is not used
dans votre paramètre global, cela sera interprété comme vrai . - si vous avez la valeur
False is the new truth!
, ou peut-êtreNo way
dans ce paramètre, il sera aussi être interprété comme vrai par la construction. - L'interface graphique VS2015 affichera un avertissement si elle ne peut pas interpréter la chaîne ici.:
- le GUI VS2010 affichera False pour toutes les valeurs, sauf
false
, même si cela est alors interprété comme vrai lors de la construction du projet.
Quoi de plus?:
Il semble que lors de la conversion des vieux Solutions vcproj
des fichiers, le convertisseur de prendre les anciennes dépendances qui ont été spécifiés dans le sln
et la valeur de la vcproj
projet de l'option de l'éditeur de liens, et en fait le LinkLibraryDependency
pour chaque ProjectReference
il insère dans le nouveau vcxproj
- c'est une raison que je pense que c'est une voie sans option si longtemps, la plupart de nos projets de conversion de l'histoire de rencontres retour à VS2005.
ici, la chose est que vous devez aller à, Propriétés du projet -> propriétés communes -> cadre et références et ensuite ajouter une nouvelle référence à vos projets. Alors seulement il fonctionnera dans VS 2010 pas comme dans les premières versions de VS
cela doit être défini dans le Properties / Common / Frameworks and References
alternativement vous pouvez ajouter quelque chose comme la chose ci-dessous dans votre fichier vcxproj, bien sûr utiliser le projet réel que vous référencez et l'uuid de ce projet.
<ItemGroup>
<ProjectReference Include="..\Cpp\Cpp.vcxproj">
<Project>{c58574bf-9dd8-4cf8-b5b6-6551f2f3eece}</Project>
</ProjectReference>
</ItemGroup>
il semble que vous devez aussi mettre
<IgnoreImportLibrary>false</IgnoreImportLibrary>
dans le projet référencé.