Pregunta

¿Cómo se configura el orden de las bibliotecas en automake?

En mi archivo am tengo algo como:

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

Ahora, cuando compilo obtengo esta línea de compilación similar también:

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

El problema es que libmine.a depende de libadhoc.a, por lo tanto, la línea de compilación debería ser:

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

¿Cómo se configura el orden de las bibliotecas en automake? (O tal vez una solución; ¿cómo repites todas las bibliotecas en la línea de compilación? Eso es lo que hago en mis Makefiles personalizados).

¿Fue útil?

Solución

Del manual de Automake (principalmente §8.1.2 pero también §8.4 ):

  

PROG_LDADD es inapropiado para   pasar banderas de enlace específicas del programa   (excepto -l , -L , -dlopen y    -dlpreopen ). Entonces, usa el    PROG_LDFLAGS variable para esto   propósito.

Eso implica que puede (pero en realidad debería) usar -l y -L en LDADD , no en LDFLAGS . En otras palabras, su Makefile.am simplemente debería leer

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

Otros consejos

Una idea del libro de automake ( http://sources.redhat.com/ autobook / autobook / autobook_92.html ): cree una biblioteca de conveniencia a partir de libmine y libadhoc, y vincule myprog con eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top