2009-10-30 13 views
6

Comment définissez-vous l'ordre des bibliothèques dans automake?Comment définissez-vous l'ordre des bibliothèques dans automake?

Dans mon fichier am J'ai quelque chose comme:

myprog_DEPENDENCIES = adhoc-target 
myprog_SOURCES = myprog.c 
myprog_LDADD = libmine.la 
myprog_LFLAGS = -static -L/home/user/lib -ladhoc 

Maintenant, quand je compile je reçois cette ligne de compilation similaire aussi:

gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a 

Le problème est que libmine.a dépend libadhoc .a, la ligne de compilation doit donc être:

gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc 

Comment définir l'ordre des bibliothèques dans automake? (Ou peut-être un travail autour, comment répétez-vous toutes les bibliothèques dans la ligne de compilation.)

Répondre

6

A partir du manuel Automake (la plupart du temps §8.1.2 mais aussi §8.4):

PROG_LDADD est inapproprié pour passage des drapeaux de liaison spécifiques au programme (sauf pour -l, -L, -dlopen et -dlpreopen). Donc, utilisez la variable PROG_LDFLAGS pour ce but .

que vous pouvez Implique (mais en fait, vous devriez) utiliser -l et -L dans LDADD, pas LDFLAGS. En d'autres termes, votre Makefile.am devrait simplement lire

myprog_DEPENDENCIES = adhoc-target 
myprog_SOURCES = myprog.c 
myprog_LDADD = libmine.la -L/home/user/lib -ladhoc 
myprog_LDFLAGS = -static 
+0

qui ne fonctionne pas non plus –

+0

Comment ça marche pas? Quelle est la commande de lien que vous obtenez? – adl

+0

Cela a résolu le problème presque identique que j'avais avec libgcrypt. Merci! – cmyers