Création d'un projet, de Makefile à des bibliothèques statiques / dynamiques sous UNIX
Les gars, décririez-vous quelques choses à propos de c++ blocs de construction, sur unix.
Je veux créer une application qui se lie à l'encontre de bibliothèques statiques et dynamiques libs (.donc).
Question 1: Comment puis-je créer statique de la bibliothèque à l'aide de gcc/g++ ?Comment faire pour que mon application lien contre elle.
Question 2: Comment le spécifier dans le fichier makefile, reliant contre la statique et dynamique libs, en supposant que les deux bibliothèques ont des fichiers d'en-tête
Résumé: j'ai été en utilisant les makefiles et les bibliothèques depuis des années, écrit par quelqu'un d'autre. Ainsi, à chaque fois que je l'ai modifié, j'ai simplement coupé et collé des choses autour, sans vraiment le comprendre. Maintenant, je veux descendre à terre et de comprendre la construction/liant/Création Makfile processus en profondeur.
Qu'est ce qu'un bon livre, la description de ces concepts dans les détails les plus intimes?
Grâce
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Bibliothèques statiques sont généralement archivé avec le
ar
de commande. Une fois que vous générez tous les fichiers objet (de préférence avec le-fPIC
interrupteur sur GCC), vous pouvez exécuterar
comme suit:La
man
page décrit les options.Les bibliothèques dynamiques sont construit habituellement avec la
-shared
passer àgcc
ould
et le nom du fichier de sortie avec un.so
extension.Autotools gère avec le
libtool
programme. Je ne suis pas familier avec son utilisation.De se lier à ces bibliothèques peut être fait soit en dressant la liste des bibliothèques avec le
-l
(apl) de l'interrupteur (comme-lX
lien verslibX.so
) ou en spécifiant directement avec des chemins absolus (comme l'ajout de/usr/lib/libX.so
de votre commande). Les bibliothèques statiques sont liés par la spécification de-static
avant-l
ou le chemin d'accès absolu à la.a
archive.Os à nu le Makefile pour la création d'une bibliothèque statique comprenant le code de la foo.cpp, bar.cpp:
Os à nu le Makefile pour une application baz.cpp que des liens statiques à la bibliothèque.un:
Dynamique de la bibliothèque à gauche, ahem, comme un exercice pour le lecteur.
Réponse 1: Pour créer une bibliothèque statique à partir de fichiers source foo.c et d'un bar.c, faites ceci:
Pour plus d'informations à ce sujet, lire le Manuel de GCC
manuel pour apprendre à utiliser le compilateur et l'éditeur de liens par le compilateur. L'
binutils manuel devrait également
être utile.
Réponse 2: Le GNU Make manuel est assez
bon. Pour en apprendre beaucoup sur les bibliothèques et leur façon de travailler, de lire les les Linkers et les Chargeurs
livre de John R. Levine.
Bibliothèques statiques sont assez simples, mais les bibliothèques partagées peuvent être très poilu, selon
sur la plate-forme et le montant de la portabilité que vous voulez et le besoin. Par exemple, sur
certains systèmes statiques et des bibliothèques partagées qui doivent être compilés avec des options différentes
pour fonctionner correctement (un et l'autre ne doit pas être compilé avec indépendant de la position
le code). L'ensemble des cadres des services publics ont été développés pour rendre cela plus facile (libtool),
mais ils ne sont pas sans poser de problème eux-mêmes.
Puisque vous vous référez à gcc, je suppose que vous êtes à l'aide de GNU Make. Le meilleur de la documentation que j'ai trouvé est que le manuel officielqui couvre tout ce que vous devez savoir dans un format facile à comprendre.
Quand j'apprenais à propos de Linux programmation, Advanced Linux Programmation m'a beaucoup aidé. Vous pouvez vérifier l'Écriture et l'Utilisation de Bibliothèques de section dans ce pdf. Il explique un peu sur les bibliothèques de Linux.
vous voudrez peut-être avoir un coup d'oeil à cette, trop: http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html