2010-06-21 8 views
2

Dans Visual Studio 2008, j'ai une solution qui contient deux projets: un projet est un fichier .dll, l'autre est une application de ligne de commande qui appelle le fichier .dll.Erreur de liaison Tricky dans Visual Studio 2008

Si je supprime l'un des fichiers ("ast.c"), puis l'ajouter directement, l'erreur suivante apparaît.

Comment réparer cette erreur?

Erreur 22 Erreur LNK2019: symbole externe non résolu "__declspec (dllimport) int __cdecl ast_get_int_value (struct ast_node *, void *)" (__imp_ ast_get_int_value @@ YAHPAUast_node @@ PAX @ Z?) Référencé en fonction « double __cdecl d_low (struct ast_node *, struct ast_node *, struct ast_node *, struct ast_node *, void *) »(? d_low @@ YANPAUast_node @@ 000PAX @ Z) main.obj principale

Répondre

2

Got it - avait à droite cliquez sur le projet, allez dans "Linker" et "Input" et "dépendances supplémentaires", et ajoutez ".. \ $ (ConfigurationName) \ dll.lib". Le fichier "dll.lib" est créé dans le cadre du processus de compilation pour le .dll, et nous devons dire à l'éditeur de liens où ce fichier est afin qu'il puisse résoudre les dépendances externes. Cela a corrigé les erreurs de liaison une fois pour toutes.

Quelques conseils de belles http://www.codeproject.com/KB/DLL/XDllPt1.aspx qui expliquent le processus de liaison:

  • La DLL exporte ses symboles, et l'application importe les symboles de DLL. Lors de la compilation de l'application, le compilateur voit les symboles DLL via un fichier include (Test.h). Lors de la liaison de l'application, l'éditeur de liens voit les symboles DLL via la bibliothèque d'importation (Test.lib).
  • La DLL doit se trouver dans le même répertoire que le fichier EXE lors de l'exécution de l'application. Dans les premières versions de Windows, il était acceptable de placer des DLL d'application dans les répertoires Windows ou System, mais cela est maintenant reconnu comme pouvant causer des problèmes et ne devrait pas être fait.

Et voir aussi:

http://support.microsoft.com/kb/815065

Et:

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a22571ad-ef89-4f94-afca-4f4d32cdd0f2