Comment est le C++ standard library lié à ma demande?
Quand j'ai l'habitude d'utiliser du code (inclure les en-têtes) de la 3ème partie (non-standard) bibliothèques C++, un pré-construit fichier binaire est lié à (ou inclus dans) l'objectif de l'exécutable que représente ma candidature, mais ce qui se passe avec le C++ standard library?, comme ce que j'ai vu je n'ai pas de transporter une bibliothèque avec une application qui utilise seulement le code de la norme C++ de la bibliothèque, c'est ainsi que le code lié statiquement et inclus dans l'exécutable?
Vous devez vous connecter pour publier un commentaire.
Non, les bibliothèques standard par défaut sont liés dynamiquement à l'exécution.
Lors de l'exécution du chargeur dynamique va le chercher dans quelques endroits standard pour les bibliothèques dynamiques si elle trouve la charge et exécute sinon, l'application se ferme.
Sur Les Systèmes Unix:
/usr/lib: recherchez: libstdc++*
Sur Windows:
c:\windows\system32 chercher: MSVCRT.DLL
Il ya aussi un couple de variables d'Environnement qui peuvent affecter le chemin de recherche. Regardez vos plates-formes page de man pour dlopen pour voir ce qu'ils sont. Tout ce dont vous avez besoin doit être dans les pages man de dlopen sur votre plate-forme.
La plupart des systèmes, ces libs dans les endroits appropriés et seront automatiquement trouvés.
Le reste de la STL ne sera pas introduit supplémentaire partagé lib dépendances.
c:\windows\system32
. Au moins c'est là que Visual Studio runtimes sont conservés. Je ne pense pas que MinGW des liens avec eux.MSVCRT.DLL
est pas en C++ bibliothèque run-time, c'est une bibliothèque C run-time. Le C++ de la bibliothèque run-time estMSVCP60.DLL
.-lstdc++
param?Au cours des dernières MinGW gcc/g++ versions (4.40) vous pouvez lier à l'encontre d'une dll partagée plutôt que la valeur par défaut statique de la bibliothèque à l'aide de l'indicateur -partagé-libstdc++.
Les versions statiques de la bibliothèque sont situés dans /mingw/lib/gcc/mingw32/[version de gcc]. Le nom de fichier est libstdc++.un. Ce sera relié par défaut lors de la compilation en c++ application avec MinGW.
-static-libstdc++
.La seule base au moment de l'exécution de dépendance pour MinGW les programmes C++
est sur MSVCRT.DLL. D'autres dépendances dépendra de ce que votre programme ne fait - par exemple, s'il utilise ODBC de la base de données de connectivité, il
dépendent ODBC32.DLL (et probablement quelques autres Dll Windows). Cependant, l'utilisation de classes comme std::string ou std::vector dans un MinGW programme C++ ne sera pas introduire de nouvelles dynamiques de la bibliothèque de dépendances.
Si vous êtes inquiet au sujet de la librairie dynamique des dépendances, découvrez
l'outil "Dependency Walker" à http://www.dependencywalker.com/
La plupart de tout dans les fichiers d'en-tête, parce qu'il est si fortement basé sur un modèle. Très peu nécessite
libstdc++.so
(iostream
, peut-être, je pense).C et C++ runtime des bibliothèques sont liés de la même manière que la normale bibliothèques, la principale différence est qu'ils sont généralement compilées automatiquement contre et lié par le compilateur et l'éditeur de liens avec aucun besoin de les spécifier.
Il est incorrect, cependant, de généraliser, que vous n'avez pas à les expédier avec votre application. Dans la plupart des cas où vous expédier liée dynamiquement les fichiers binaires, vous aurez besoin de les inclure, par exemple, si vous compilez avec MSVC++, vous permettra de relier contre ce qui est installé sur votre machine, si vous installez la liée de façon dynamique binaire sur une nouvelle installation de windows, vous êtes susceptible de rencontrer des problèmes, à moins que vous vous assurez que les bibliothèques sont inclus en tant que partie de la installpack (voir la documentation sur visual studio transmissibles). La même chose est vraie sur Solaris machines (bibliothèques standards sont mis à niveau dans le cadre d'un jeu de patch). Avec Linux, c'est plus compliqué, vous ne pouvez pas lier statiquement en raison de la GPL, cependant, les bibliothèques sont généralement installé par l'intermédiaire de la distribution des paquets.