0

Je travaille sur un fichier de solution (VS 2005) contenant plusieurs projets.Problèmes de liaison dans une solution Visual Studio 2005 multiprojet

Il y a deux projets qui me préoccupent actuellement: l'un appelé core et l'autre appelé log.

Le projet principal est le projet de démarrage et le projet de journal a été coché dans ses dépendances de projet.

j'ai deux fichiers dans le projet de base - AB.h (déclarations) et AB.cpp (définitions)

De nombreux autres fichiers cpp du projet de base se référer à AB.h et n'a aucun problème à trouver les définitions AB.cpp.

Le problème vient maintenant. J'ai un fichier cpp appelé CD.cpp dans le projet de journal qui nécessite de faire référence à AB.h. J'ai ajouté le répertoire include de AB.h aux projets core et log (AB.cpp réside également dans le même dossier)

De plus, le projet de journalisation a $ (OutDir) dans son paramètre "Additional Library Directories" dans la partie Linker des paramètres du projet. Le core du projet est compilé dans une DLL, mais il y a aussi un core.lib dans le même dossier parmi d'autres indésirables. Solution compilée en version Release.

Dans CD.cpp, lorsque je clique avec le bouton droit sur la ligne #include "AB.h", il me prend pour fichier .h dans le dossier principal. Jusqu'à présent, tout va bien. Cependant lorsque j'essaie de compiler la solution, le projet de journal ne construit pas correctement, montrant ces deux erreurs de l'éditeur de liens.

log.obj: erreur LNK2001: symbole externe non résolu "class monNamespace :: myClass myInstance" (myInstance @@ 3VmyClass @ monNamespace @@ A?)

log.obj: erreur LNK2001: symbole externe non résolu « bool infFlag "(? infFlag @@ 3_NA)

La classe fait partie d'un fichier h inclus dans AB.h (instance déclarée dans AB.cpp et incluse comme extern dans CD.cpp .infFlag est déclarée dans AB.cpp et déclaré dans CD.cpp comme externe

Que dois-je faire pour laisser construire correctement? Merci


OK. Vous avez besoin de plus de détails. Sûr.

Un fichier de solution. Plusieurs projets

[Core]

comprend AB.h et AB.cpp

-AB.h

--includes EF.h de lib externe (fonctions de cette lib fonctionne correctement pour les fichiers dans le même projet de base).

--declares certaines fonctions

-AB.cpp

--defines ces fonctions qui a été déclarée en AB.h

-Certains autres fichiers cpp qui peuvent utiliser ces fonctions de AB.h sans problèmes

[/ Core]

[Log -> Dépendances du projet -> Core]

-Pas h fichiers

-CD.cpp

--requires AB.h à travailler. Est inclus avec une commande #include et son maillées (je peux faire un clic droit et cliquez sur « fichier ouvert » pour ouvrir le vrai fichier .H)

--uses fonctions de AB.h

[/ Log]

J'espère que cela vous permettra de mieux comprendre la structure du projet dans ma solution.

Un problème survient lors de la compilation du projet de journal. Il arrive toujours avec une erreur de lien pour toute référence à des fonctions dans AB.h disant "symbole externe non résolu". Je suppose que cela vient parce qu'il ne peut pas trouver les définitions pour les fonctions déclarées dans AB.h (probablement parce que c'est un projet différent). Puisque le journal dépend du noyau, et que le noyau sera compilé dès ce moment, j'ai ajouté $ (OutputDir) aux répertoires de la bibliothèque (core et log construisent dans le même répertoire) afin qu'il puisse trouver core.lib et aussi ajouté .lib "à" Dépendances supplémentaires "sous l'onglet Entrée sous Lieur (dans les propriétés du projet).

Alors voilà. Des idées?


+0

Je pense que vous devriez enlever votre code forme minimale causant des erreurs et nous le montrer. – adf88

+0

Avez-vous essayé liste le répertoire spécifique (non $ (OutputDir)), y compris le Release/Debug dans la section linker? Je suppose que ce n'est pas résolu correctement – Jess

Répondre

0

En outre, le projet de journal a $ (OutDir) dans son paramètre « Répertoires de bibliothèques supplémentaires » dans la partie Linker des paramètres du projet.

Probablement incorrect. Il devrait être ce répertoire où "core.lib" réside, le $(OutDir) est où le log sera placé.

La classe fait partie d'un fichier h inclus dans AB.h (par exemple déclaré dans AB.cpp et inclus dans extern CD.cpp. InfFlag est déclarée AB.cpp et a déclaré dans CD.cpp comme extern .

Alors, où sont les définitions?

+0

S'il vous plaît renvoyer à la question originale. ont ajouté plus de détails sous la question initiale. – alpanik