59 votes

Visual Studio 2010 ne lie pas automatiquement les bibliothèques statiques des projets qui sont des dépendances comme il devrait le faire

  • Créer une nouvelle solution avec un projet en ligne de commande de la console C++.
  • Créer un nouveau projet, une bibliothèque statique C++.
  • Faire en sorte que le projet en ligne de commande dépende de la bibliothèque
  • Assurez-vous que l'option "Link Library Dependencies" est activée dans Configuration => Linker => General (elle l'est par défaut).
  • Visual Studio ne liera toujours pas la bibliothèque.

Comment puis-je réparer cela ? Cela fonctionnait dans Visual Studio 2008.

83voto

Sean Fausett Points 1702

Cela fonctionne toujours, mais c'était modifié dans VS 2010 :

"Avec VS2010, nous avons cessé de prendre en charge les dépendances de projet définissant des références implicites et nous avons également introduit une nouvelle façon de définir les dépendances de projet au niveau du projet. Puisqu'une référence de projet et une dépendance de projet sont des concepts proches, s'appliquant tous deux à un projet, il était logique de les faire représenter ensemble, de manière cohérente, dans le fichier de projet. Comme vous le verrez dans les extraits ci-dessous, la seule différence entre une définition de référence de projet et une définition de dépendance de projet consiste en des métadonnées qui définissent l'inclusion/exclusion de l'assemblage de sortie dans/de la ligne de commande principale de liaison de projet. Bien que nous n'ayons pas supprimé la boîte de dialogue "Dépendances du projet", nous recommandons de définir les nouvelles dépendances du projet via la boîte de dialogue "Cadre et références". Vous devez définir la propriété "Reference Assembly Output" dans l'interface utilisateur de la page de propriétés sur false pour une dépendance de projet et sur true pour une référence de projet."

Il suffit de cliquer avec le bouton droit de la souris sur le projet de la console, de sélectionner "Propriétés->Propriétés communes->Framework et références->Ajouter une nouvelle référence" et d'ajouter le projet de bibliothèque statique ; vérifiez également que "Link Library Dependencies" est True sur le côté droit. Cela semble fonctionner pour les versions de débogage et de publication. On apprend quelque chose de nouveau tous les jours ;)

4 votes

Vous devez ajouter des projets à la solution actuelle ? Quel est alors l'intérêt d'avoir des bibliothèques statiques ?

5 votes

@UtkarshSinha Vous n'avez pas "besoin" d'ajouter le projet de bibliothèque statique à la solution, mais s'il ne fait pas partie de la solution, Visual Studio ne peut pas le construire. Si vous avez une bibliothèque statique préconstruite qui ne fait pas partie de la solution, toute cette question ne s'applique pas à vous.

1 votes

25voto

jalf Points 142628

Ils ont modifié l'interface utilisateur pour l'ajout de dépendances de projets C++ dans VS2010, mais curieusement, sans supprimer l'ancienne interface utilisateur, ni indiquer d'une quelconque manière qu'elle ne fonctionne plus.

Pour créer la dépendance dans VS2010, vous devez utiliser "Add New Reference" (qui se trouve dans les propriétés du projet), et peut-être aussi dans le menu du clic droit du projet (je n'ai pas VS ici pour vérifier).

L'ancienne boîte de dialogue "Dépendances du projet" n'est pratiquement plus fonctionnelle.

4 votes

De plus, la boîte de dialogue parle des frameworks .Net, même pour les projets purement C++. Microsoft n'a manifestement pas effectué de tests d'interface utilisateur de base sur des solutions comportant plusieurs projets. Cela donne vraiment l'impression que Visual Studio n'est destiné qu'à des projets de la taille de Hello, World.

1 votes

L'ancienne interface utilisateur faisait deux des choses, et celles-ci ont été séparées. L'ancienne interface fait toujours le classement des dépendances de compilation, les propriétés du projet gèrent maintenant la liaison. Ce n'est pas parce que A doit être compilé avant B que B doit être lié à A.

1 votes

VS 2017 et IL EST TOUJOURS BRISÉ!@#$!@#$!@#$ mais pas supprimé. JFC. > :(

8voto

YePhIcK Points 1784

Pour MSVC 14 (version 2015), faites un clic droit sur le projet, puis "Add->Reference..." et vérifier toutes les dépendances nécessaires.

Oui, il a changé quelque part entre les versions 2010 et 2015. Amusant !

Et si vous cherchez à lier un projet qui contient des ressources, vous devez spécifier l'adresse du projet. .res directement dans la liste des dépendances d'entrée de l'éditeur de liens (boîte de dialogue des propriétés du projet) car il n'est pas pris en compte par la configuration ci-dessus.

UPDATE

Toujours le même (nouveau) comportement dans MSVC 2017

3voto

Nick Points 5293

Je crois que l'ancienne interface utilisateur (dépendances) affecte l'ordre de construction pour Visual Studio, lors de la construction à partir de l'IDE, pour information. Le nouveau système de configuration de projet incorpore les références dans chaque fichier de projet de sorte que vous pouvez construire à partir de l'extérieur de l'IDE (alors que dans les versions précédentes, vous ne pouviez pas, parce que vous n'obtiendriez pas de liaison automatique pour les dépendances, puisque les dépendances étaient seulement faites au niveau de la solution).

Il y a aussi quelques problèmes avec des projets plus complexes dans le nouveau système ; spécifiquement, tous les projets binaires résultants doivent avoir des références explicites à chaque bibliothèque dépendante pour être construits correctement, alors qu'auparavant ils pouvaient être effectivement hérités d'autres bibliothèques dépendantes. Même cause sous-jacente, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X