Question

Dire que j'ai un C ++ statique lib, static.lib et je veux appeler des fonctions à partir d'un C ++ partagé lib, dire shared.lib. Est-il possible?

Supposons maintenant que j'ai une autre lib partagée, dire shared2.lib qui lie à static.lib mais ne lie pas à shared.lib. Est-ce que l'éditeur de liens lien automatiquement shared2.lib à shared.lib dans ce cas?

J'utilise Microsoft Visual Studio 2003.

Était-ce utile?

La solution

Les bibliothèques statiques ne sont pas liées. Ils sont juste une collection de fichiers (* .OBJ ou * .o) qui sont archivés ensemble dans un fichier de bibliothèque (un peu comme un goudron / fichier zip) pour le rendre plus facile pour l'éditeur de liens pour trouver les symboles dont il a besoin.

Une lib statique peut appeler des fonctions qui ne sont pas définies (mais seulement sont déclarées dans un fichier d'en-tête), car il est seulement compilé. Ensuite, lorsque vous liez un EXE ou DLL qui utilise la lib statique, vous devrez créer un lien avec une autre bibliothèque qui fournit l'appelé de la lib statique mais pas définis.

Si vous voulez l'éditeur de liens pour lier automatiquement les autres bibliothèques de suggestion de Stephen travaillera et est utilisé par les bibliothèques très réputées comme coup de fouet et stlport. Pour ce faire, mettre le pragma dans le fichier principal d'en-tête pour la bibliothèque statique. Vous devez inclure la bibliothèque statique et ses personnes à charge.

Cependant cette fonctionnalité OMI est vraiment destiné pour les écrivains de la bibliothèque, où la bibliothèque se trouve dans le chemin de la bibliothèque du système de sorte que le linker trouverez facilement. En outre, dans le cas de boost et stlport ils utilisent cette fonctionnalité pour soutenir plusieurs versions des mêmes bibliothèques avec des options définies avec #defines où différentes options nécessitent différentes versions de la bibliothèque à lier. Cela signifie que les utilisateurs sont moins susceptibles de configurer stimuler une façon et un lien avec une bibliothèque configuré une autre.

Ma préférence pour le code de l'application est de lier explicitement les pièces nécessaires.

Autres conseils

L'éditeur de liens n'apportera pas automatiquement dans les autres bibliothèques, mais vous pouvez utiliser # pragma commentaire (lib, « static.lib ») pour simplifier le processus de relier les fichiers supplémentaires en ajoutant le pragma à vos fichiers d'en-tête.

  

Dire que j'ai statique C ++ lib,   static.lib et je veux appeler quelques-uns   fonctions à partir d'un C ++ partagé lib, disent   shared.lib. Est-il possible?

Oui, par exemple, lorsque vous appelez les fonctions de Windows à partir de votre lib statique, ils sont normalement une bibliothèque dynamique donc il devrait y avoir aucune différence.

  

Supposons maintenant que j'ai une autre commune   lib, dire shared2.lib qui relie à   static.lib mais ne lie pas   shared.lib. Est-ce que l'éditeur de liens   lier automatiquement shared2.lib à   shared.lib dans ce cas?

Avoir des dépendances comme celui-ci pourrait causer des problèmes plus tard, je vous suggère plutôt de charger dynamiquement les bibliothèques en utilisant

scroll top