2009-09-14 7 views
0

Je vais essayer d'expliquer brièvement ce que je veux faire:Troubles à inclure (Linking) une bibliothèque statique dans un autre

Un projet en utilisant une bibliothèque statique qui ont un autre comme depandency. Il produit un projet appelé MyProject reliant MyLib1 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 à définir inclure. Lors de la liaison, j'utilise la propriété "Additional Include Directory" (sur le noeud C/C++ de la propriété du projet). Cela semble fonctionner entre MyProject et MyLib1 mais pas MyLib1 et MyLib2. Par exemple: J'ai un fichier dans MyLib2 appelé foo.cpp; L'utilisation de #include "foo.cpp" rend le studio visuel indiquant que foo.cpp est inconnu (fichier ou dossier manquant). Pour assurer que ce n'est pas un mauvais chemin que j'ai donné, j'ai fait plusieurs tentatives comme suit: copier-coller le chemin montré dans la ligne de commande (utilisée pour compiler la bibliothèque) dans win explorer: Je vois bien le code source de ma deuxième bibliothèque. J'ai refait le projet plusieurs fois et à chaque fois j'ai utilisé différents noms (ce qui m'oblige à faire attention à ça) et tout semble bien défini (mais pas "compris").

La seule façon que je trouve réellement pour le faire fonctionner: en utilisant #include "c: \\ foo.cpp" en tant que ... Très agréable pour la portabilité!

Voici un code postal de la solution pour tester vous-même et dites-moi ce qui ne va pas: MyProject.rar

Merci d'avoir pris un certain temps pour me aider! Lucyberad

Répondre

1

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

En second lieu, l'utilisation déclaration avant de vos fonctions externes:

void appellib2(void); 

void appellib1(void) 
{ 
    appellib2(); 
} 

tiers, cliquez droit sur chaque projet dans l'Explorateur de solutions et sélectionnez « dépendances du projet ... » et mis en place des dépendances appropriées: MyProject -> MyLib1 -> MyLib2. Enfin, dans les propriétés de MyProject, définissez des dépendances supplémentaires MyLib1.lib.

Maintenant, je peux construire et exécuter votre projet sans erreurs.

MISE À JOUR

Jamais * renomme Cpp à * .h juste pour résoudre les 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.

+0

Merci, il semble fonctionner de cette façon. En fait, la dépendance ne nécessite pas d'utiliser #include, mais nécessite des signatures pour travailler avec. Une autre personne trouve que la mise à disposition de "$ (SolutionDir) \ MyLib2" dans des répertoires d'inclusion supplémentaires (en créant la ligne suivante: "$ (SolutionDir) \ MyLib1"; "$ (SolutionDir) \ MyLib2") fonctionne également. Mais cette fois, MyLib2 est disponible dans MyProject. Tout ce dont vous avez besoin, les deux réponses fonctionne (et correspondent bien à deux fins spécifiques). Merci pour l'aide, Lucyberad. – Lucyberad

0

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

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

J'ai configuré les dépendances de projet. Il échoue toujours.

J'ai mis en place des dépendances supplémentaires MyLib1.lib à MyProject (Je pense que c'était la prochaine erreur que je pourrais trouver, produisant une erreur de liaison).

Avec ces modifications, j'ai toujours inclure l'erreur mylib2.h: aucun fichier ou répertoire.

Voici la nouvelle archive: MyProject.rar

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

Merci, Lucyberad.

+0

J'ai mis à jour ma réponse avec le lien vers votre projet corrigé. –

+0

P. S. Répondez à mes réponses, car je reçois une notification dans ce cas. –