web-dev-qa-db-fra.com

Visual Studio 2010 ne lie pas automatiquement les bibliothèques statiques à partir de projets qui sont des dépendances comme il se doit

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

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

57
Thomas Bonini

Cela fonctionne toujours, mais é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 avoir représentés 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 d'assembly de sortie dans/à partir de la ligne de commande principale du lien de projet. Bien que nous n'ayons pas supprimé la boîte de dialogue "Project Dependencies", nous vous recommandons de définir de nouvelles dépendances de projet via la boîte de dialogue "Framework and References". Vous devez définir la propriété "Reference Assembly Output" dans la page de propriétés UI à false pour une dépendance de projet et à true pour une référence de projet. "

Faites simplement un clic droit sur le projet de console, sélectionnez "Propriétés-> Propriétés communes-> Framework et références-> Ajouter une nouvelle référence" et ajoutez le projet de bibliothèque statique; vérifiez également que "Link Library Dependencies" est True sur le côté droit. Semble fonctionner pour les versions de débogage et de publication. Vous apprenez quelque chose de nouveau chaque jour. ;)

81
Sean Fausett

Ils ont changé l'interface utilisateur pour ajouter des dépendances de projet C++ dans VS2010, mais curieusement, sans supprimer l'ancienne interface utilisateur, ou en aucune manière indiquant qu'elle ne fonctionne plus.

Pour créer la dépendance dans VS2010, vous devez utiliser "Ajouter une nouvelle référence" (peut être trouvé dans les propriétés du projet), et peut-être aussi dans le menu contextuel du projet (ne pas avoir VS ici pour vérifier)

L'ancienne boîte de dialogue "Project Dependencies" est fondamentalement rompue maintenant.

23
jalf

Pour MSVC 14 (version 2015), cliquez avec le bouton droit sur le projet, puis "Add->Reference..." et vérifiez toutes les dépendances nécessaires.

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

Et si vous cherchez à lier un projet qui contient des ressources - vous devez spécifier le .res fichier 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 récupéré par la configuration ci-dessus.

MISE À JOUR

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

8
YePhIcK

Je crois que l'ancienne interface utilisateur (dépendances) affecte l'ordre de génération pour Visual Studio, lors de la construction à partir de l'IDE, pour plus d'informations. Le nouveau système de configuration de projet incorpore les références dans chaque fichier de projet afin que vous puissiez créer à partir de l'extérieur de IDE (alors que dans les versions précédentes, vous ne pouviez pas, car vous n'obtiendrez pas de liaison automatique pour les dépendances, puisque les dépendances ne se faisaient qu'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 se construire correctement, alors qu'auparavant ils pouvaient être hérités de manière efficace d'autres bibliothèques dépendantes. Même cause sous-jacente, cependant.

3
Nick