Question

Je vais essayer d'expliquer brièvement ce que je veux faire:

Un projet utilisant une bibliothèque statique qui en a une autre comme dépendance. Il produit un projet appelé liaison MyProject sur MyLib1 reliant sur MyLib2. Voici l'ordre de compilation:

  • MyLib2
  • MyLib1 (lien vers MyLib2)
  • MyProject (lien vers MyLib1)

J'utilise Visual Studio 2008 et j'ai quelques problèmes pour définir l'inclusion. Lors de la liaison, j'utilise la propriété " Répertoire d'inclusion supplémentaire " (sur le nœud C / C ++ de la propriété du projet). Cela semble fonctionner entre MyProject et MyLib1 mais pas MyLib1 et MyLib2. Pour Exemple: j'ai un fichier dans MyLib2 appelé foo.cpp; Utilisation de #include " foo.cpp " fait en sorte que visual studio indique que foo.cpp est inconnu (fichier ou dossier manquant).

Pour être sûr que ce n’est PAS le mauvais chemin que j’ai donné, j’ai fait plusieurs essais comme suit: copier-coller le chemin indiqué dans la ligne de commande (utilisée pour compiler la bibliothèque) dans Win Explorer: je vois bien le code source de mon deuxième bibliothèque. J'ai refait le projet plusieurs fois et chaque fois j'ai utilisé des noms différents (ce qui m'oblige à y prêter attention) et tout semble bien défini (mais pas "y compris").

La seule façon pour moi de le faire fonctionner: utiliser #include "c: \\ foo.cpp" en tant que include ... Très agréable pour la portabilité!

Voici un zip de la solution pour le tester vous-même et me dire ce qui ne va pas: MyProject.rar

Merci d'avoir pris le temps de m'aider! Lucyberad

Était-ce utile?

La solution

D'abord, n'incluez jamais les fichiers * .cpp.

Deuxièmement, utilisez la déclaration en aval de vos fonctions externes:

void appellib2(void);

void appellib1(void)
{
    appellib2();
}

Troisièmement, cliquez avec le bouton droit de la souris sur chaque projet dans l'explorateur de solutions, puis sélectionnez "Dépendances du projet ..." et configurez les dépendances appropriées: MyProject - > MyLib1 - > MyLib2.

Enfin, dans les propriétés de MyProject, configurez des dépendances supplémentaires MyLib1.lib.

Je peux maintenant construire et exécuter votre projet sans erreurs.

MISE À JOUR

Ne renommez jamais * .cpp en * .h simplement pour résoudre des problèmes de liaison. Si vous avez une définition dans votre fichier * .h, vous ne pourrez pas l’inclure deux fois ou plus.

Voici votre projet YourProject.rar .

Autres conseils

J'ai changé .cpp en .h. Je sais que je n'ai jamais inclus de fichier RPC, mais c'était à des fins de test.

J'ai ajouté un prototype de chaque fonction mais cela ne fonctionne pas mieux (il n'inclut pas le fichier mylib2.cpp, le prototype est meilleur mais pas utile dans ce test).

J'ai mis en place des dépendances de projet. Il échoue toujours.

J'ai configuré des dépendances supplémentaires MyLib1.lib vers MyProject (je pense que c'était la prochaine erreur que je pourrais trouver, ce qui produirait une erreur de liaison).

Avec ces modifications, j'ai toujours l'erreur include mylib2.h: aucun fichier ni répertoire de ce type.

Voici la nouvelle archive: MyProject.rar

Si vous parvenez à le faire fonctionner, pouvez-vous me faire une archive de la solution de travail?

Merci, Lucyberad.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top