.lib le fichier n'est pas créé (VS2008)
J'ai ajouté un projet dll de ma solution et explicitement référencé par un projet exécutable.
L'exécutable se plaint qu'il ne peut pas trouver la lib.
Toutes les idées sur la façon de définir le projet pour créer le fichier lib?
Et peut-être même pourquoi le projet ne serait pas en créer un?!?
Acclamations
NOTE
J'ai cherché sur le projet et le fichier n'est pas créé n'importe où.
OriginalL'auteur Adam Naylor | 2009-02-20
Vous devez vous connecter pour publier un commentaire.
Dans l'éditeur de liens -> Avancé de l'onglet propriétés de la DLL projet, vérifiez que la valeur de l'Importation de la Bibliothèque (l' .lib le fichier que vous cherchez) est correcte et raisonnable. La valeur de cette propriété permettra de déterminer ce que la bibliothèque d'importation est nommé, et où l'éditeur de liens écrire.
Vous pouvez aussi avoir besoin de générer des importations fichier de définition (.def) dans votre projet, ou vérifier vos fichiers d'en-tête et assurez-vous que vos fonctions exportées sont marqués avec l' __declspec(dllexport) qualificatif dans le fichier d'en-tête. C'est généralement activée par un #define tels que:
Fondamentalement, vous voulez le compiler pour voir dllexport quand il est la construction de la bibliothèque, mais dllimport lors de votre code client est #y compris le fichier d'en-tête. Si Visual Studio a généré la base de la structure de projet, il a probablement déjà créé un convenable #define à utiliser.
Vous n'avez pas à créer les .def fichier et ajouter le dllexport, juste l'un ou l'autre. Je préfère le dernier. Aussi, si vous choisissez d'utiliser un .def fichier, vous devez le spécifier dans les propriétés de l'éditeur de liens de votre projet de bibliothèque.
C'est vraiment étrange, pouvez-vous ajouter le commutateur de ligne de commande manuellement (dans la Ligne de Commande feuille de propriétés) pour spécifier la bibliothèque d'importation? Comme /IMPLIB:C:\Madll.lib?
J'ai ajouté que basculer vers l'éditeur de liens de ligne de commande et le compilateur de ligne de commande et le fichier spécifié n'a pas été créé... c'est juste refusant de créer une lib!?!
Ce est non gérés C/C++, non? Ne sont pas gérés .NET code? 🙂
ne l'est pas .net 🙂 mais je vais vérifier ce n'est pas un managed c++ chose...
OriginalL'auteur
J'ai vu cela avant. Et ont en fait il suffit de frapper est à nouveau récemment. Un .lib le fichier n'est pas créé si rien n'est exporté. L'exportation de fonctions arrive de deux façons.
1) marque une fonction de __declspec(dllexport).
OU
2) Utiliser un .def fichier qui répertorie l'ensemble de ces fonctions qui sont exportées.
Solution:
1) nécessite Généralement un temps de compilation drapeau à être configuré pour activer un préprocesseur bloc de définir des #define __declspec(). Quelqu'un d'autre répertorié dans leur post.
2) Nécessite la mise en ligne des Propriétés->Linker->Input->Fichier de Définition de Module.
OriginalL'auteur
Avez-vous inclus le fichier lib dans les Propriétés du Projet->Linker->Input feuille dans l'Exe du Projet.
Et aussi, assurez-vous d'inclure les références Supplémentaires dans l'éditeur de liens onglet.
Si le compilateur est jeter de l'erreur lors de la construction de fichier lib? Vérifier l' $(OutDir)\$(ProjectName) emplacement pour les lib
Il n'y a pas d'erreurs en cours de levée (autre que l'un se plaindre que le fichier lib n'existent pas) et la lib n'existent pas n'importe où dans le projet.
OriginalL'auteur
Vérifier le projet qui génère de la DLL. Si elle ne produit pas un .lib, vous n'avez probablement pas dit. Vous pouvez changer la sortie du projet à partir d'une DLL à une bibliothèque statique dans Propriétés->Général>Type de Configuration (choisissez Statique de la Bibliothèque .lib)
Si c'est le cas, alors votre les propriétés sont encore mal. Vous devez vérifier où votre .fichier lib. Si c'est tout le problème est alors de vérifier les Propriétés->Linker->Bibliothèque d'Importation, et de voir où vous en êtes de la création de votre fichier lib.
sa valeur $(TargetDir)$(TargetName).lib Qui est le même paramètre que d'autres dll dans la solution qui fonctionnent bien.
Ensuite, faites une correction simple étape - choisissez un sentier connu, comme .\Test.lib. C'est vous dire si c'est juste un problème de chemin d'accès.
OriginalL'auteur