C++: Ce n' #pragma comment(lib, “XXX”) de réellement faire avec “XXX”?
Mon fond est le C#, mais je dois maintenir un certain héritage (MS) C++. Dans ce code je stumpled à travers:
#pragma comment(lib, "OtherLib700.lib")
où 700 est certaines de contrôle de version. En plus de la lib est une DLL avec le même nom.
J'ai d'abord pensé que le programme serait dépend de la DLL, mais après l'avoir sortie du système le programme fonctionne encore. Il existe une version plus récente de la DLL, mais, ce qui est nommé OtherLib900...
Il semble que le programme "inclus", le code de la lib de sorte qu'il n'est plus dépendant de la DLL externe. (Ou que le programme 'automatiquement' utilise la plus récente DLL...)
Laquelle est la bonne? Est qu'il y a moyen de confirmer l' 'hypothèse'?
OriginalL'auteur steglig | 2012-08-30
Vous devez vous connecter pour publier un commentaire.
Si un programme a ce pragma, il va chercher la bibliothèque
OtherLib700.lib
. Si c'est une bibliothèque d'importation lorsque le programme est chargé windows va rechercherOtherLib700.dll
dans le chemin d'accès. Il ne va pas essayer de chercherOtherLib900.dll
lors de l'exécution de sorte qu'il doit être de trouver votredll
dans un dossier différent. Cela suppose queOtherLib700.lib
est une bibliothèque d'importation et pas une bibliothèque statique. Si OtherLib700.lib est une bibliothèque statique, alors que c'est tout ce qu'il faut.Comment vais-je savoir si les autres lib est une importation ou une bibliothèque statique? Donc, si c'est statique, son code est inclus dans " mon " programme?
Je crois que la réponse dans la section suivante explique comment faire la différence: stackoverflow.com/questions/6402586/...
En cas de réponse incorrecte. L'éditeur de liens ne regarde jamais pour les Dll, il cherche .lib. L'info à l'intérieur de l' .lib indique à l'éditeur de liens, que faire ensuite - émettre le code directement (aka la liaison statique) ou émettre des importations .dll (le nom de l' .dll est également codée à l'intérieur de l' .lib).
Correcte, et c'est ce que je voulais dire quand j'ai écrit ça. Je vais clarifier bientôt.
OriginalL'auteur drescherjm
Que
pragma
est utilisée pour lier à l'égard de l'.lib
fichier. C'est une alternative à la spécification de la bibliothèque dans le champ dépendances externes dans les paramètres de projet.Surtout, il est utilisé pour prendre en charge différentes versions:
Lorsque votre application utilise une dynamique liée bibliothèque, un
lib
fichier vous indique les informations à propos de ce que les symboles sont exportés dans ledll
. Donc, fondamentalement, vous avez seulement besoin de l'lib
pour compiler & lien, mais vous avez besoin de ladll
pour exécuter le programme, car il contient tout le code binaire.Vous dire qu'il ya un associé
dll
, ce qui indique généralement lalib
fichier contient uniquement la liaison info, et pas de code. Vous devriez obtenir une erreur d'exécution si ledll
n'a pas été trouvé. Vous pouvez vérifier avec MSVS si une version différente de ladll
été chargé ou si il a été chargé à partir d'un endroit différent.OriginalL'auteur Luchian Grigore
Si l' .lib est un "vrai" lib avec le code (je n'ai jamais utilisé Dll pour enregistrer fournies par le système, mais je crois que vous faites "importer des libs" pour vos propres Dll), puis la DLL n'est pas nécessaire.
Comme pour le sujet, #pragma comment(lib,xxx) permet à des programmes d'ajouter certaines options de l'éditeur de liens. Peut être très utile, même si j'ai raté quelques options que j'aurais aimé ajouter comme cela. L'exemple est donné un premier exemple de son utilisation: lorsque le fichier de l'objet est inclus dans le programme, puis la lib spécifié sera ajouté en tant que bien.
Je pense qu'il voulait dire "statique" de la bibliothèque.
OriginalL'auteur Christian Stieber