2010-11-22 17 views
7

Estoy tratando de usar Autotools para construir mi programa en C que debe vincularse con ciertas bibliotecas. Solo contiene un archivo fuente C.Banderas del vinculador en el lugar equivocado

Este es el Makefile.am asociada a ella:

bin_PROGRAMS=game 
game_SOURCES=main.c 
game_CFLAGS=`pkg-config --cflags libglfw` 
game_LDFLAGS=`pkg-config --libs libglfw` 

Cuando ejecuto make, se trata de compilarlo usando esto:

gcc `pkg-config --cflags libglfw` -g -O2 `pkg-config --libs libglfw` -o game game-main.o 

Sin embargo esto es incorrecto, ya que el enlace de la biblioteca las banderas deben estar al final, o bien dará errores sobre referencias indefinidas. Por ejemplo si funciono esto:

gcc `pkg-config --cflags libglfw` -g -O2 -o game game-main.o `pkg-config --libs libglfw` 

Se compila bien.

¿Cómo puedo hacer para que el LDFLAGS primario se añada al final en lugar de en el medio?

Respuesta

10

Puede comenzar por no abusar de LDFLAGS para bibliotecas. LDFLAGS es para el enlazador flags. Utilice foo_LDADD (para ejecutables) o foobar_LIBADD (al generar una biblioteca) para listar bibliotecas de enlaces.

Además, ejecutar pkg-config dentro de Makefile.am es innecesario y derrochador. Sólo tiene que utilizar:

 
game_CFLAGS = ${libglfw_CFLAGS} 
game_LDADD = ${libglfw_LIBS} 

libglfw_CFLAGS,LIBS está poblada por esto en configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

+0

¿Cómo voy a resolver esto con un makefile regular, en lugar de autotools? Por lo que puedo decir, make no respeta LDADD (solo autotools). –

+1

Seguimiento: con archivos make normales, la solución es usar 'LOADLIBES = -lm' en lugar de' LDFLAGS = -lm'. –

Cuestiones relacionadas