J'ai le makefile suivant
CXXFILES = pthreads.cpp
CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = -lpthread -ldl
all:
$(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS)
clean:
rm -f prog *.o
J'essaie d'inclure la bibliothèque ./libmine
dans CXXFLAGS
, mais il semble que ce ne soit pas la bonne façon d'inclure une bibliothèque statique, car lorsque je compile le programme, j'obtiens une erreur de nombreuses références non définies. Alors, quelle est la bonne façon d’inclure une bibliothèque statique dans le fichier Make?
CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = libmine.a -lpthread
utilisation
LDFLAGS= -L<Directory where the library resides> -l<library name>
Comme :
LDFLAGS = -L. -lmine
pour assurer la compilation statique, vous pouvez également ajouter
LDFLAGS = -static
Ou vous pouvez simplement vous débarrasser de toute la bibliothèque en cherchant, et vous connecter directement avec.
dites que vous avez main.c fun.c
et une bibliothèque statique libmine.a
alors vous pouvez simplement faire dans votre dernière ligne de lien du Makefile
$(CC) $(CFLAGS) main.o fun.o libmine.a
Assurez-vous que l'option -L
apparaît avant l'option -l
; l'ordre des options dans les lignes de commande de l'éditeur de liens do matter, en particulier avec des bibliothèques statiques. L'option -L
spécifie un répertoire dans lequel rechercher les bibliothèques (statiques ou partagées). L'option -lname
spécifie une bibliothèque avec libmine.a
(statique) ou libmine.so
(partagée sur la plupart des variantes d'Unix, mais Mac OS X utilise .dylib
et HP-UX utilisait .sl
). Classiquement, une bibliothèque statique sera dans un fichier libmine.a
. Ceci est une convention, pas obligatoire, mais si le nom n'est pas au format libmine.a
, vous ne pouvez pas utiliser la notation -lmine
pour le trouver; vous devez l'indiquer explicitement sur la ligne de commande du compilateur (éditeur de liens).
L'option -L./libmine
indique "il existe un sous-répertoire appelé libmine
dans lequel il est possible d'effectuer une recherche pour trouver des bibliothèques". Je peux voir trois possibilités:
libmine.a
, auquel cas vous devez également ajouter -lmine
à la ligne de l'éditeur de liens (après les fichiers objet qui font référence à la bibliothèque).libmine
qui est une archive statique. Dans ce cas, vous devez simplement le répertorier en tant que fichier ./libmine
sans -L
devant. libmine.a
dans le répertoire actuel que vous voulez récupérer. Vous pouvez écrire ./libmine.a
ou -L . -lmine
et les deux doivent trouver la bibliothèque.Le -L
donne simplement le chemin où trouver le fichier .a
ou .so
. Ce que vous cherchez, c'est d'ajouter -lmine
à la variable LIBS
.
Créez ce -static -lmine
pour le forcer à choisir la bibliothèque statique (au cas où les bibliothèques statiques et dynamiques existent).
Malgré mes plaidoyers auprès des autorités (pas de réponse), je ne parviens toujours pas à poser ma propre question ..__ Je cherche une assistance pour cette tâche: J'ai un projet principal et une bibliothèque statique qui y sont liés. Tout fonctionne comme prévu. Depuis que les DEUX projets sont en cours de développement, je dois d'abord compiler la bibliothèque, puis le projet principal . Je sais qu'il existe un moyen d'automatiser ce processus, utilisé il y a des années dans MFC (fichiers de traitement par lots?). ne me souviens pas des détails. Quelque chose lié au pré/post-traitement.