2010-11-22 22 views
7

J'essaie d'utiliser Autotools pour créer mon programme C qui doit être lié à certaines bibliothèques. Il contient seulement un fichier source C.Drapeaux de l'éditeur de liens au mauvais endroit

C'est le Makefile.am associé:

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

Quand je lance make, il essaie de le compiler en utilisant ceci:

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

Cependant cela est faux, comme le lien de la bibliothèque flags doit être à la fin, sinon il va donner des erreurs sur les références non définies. Par exemple si je cours ceci:

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

Il compile bien.

Comment puis-je faire en sorte que le primaire LDFLAGS soit ajouté à la fin plutôt qu'au milieu?

Répondre

10

Vous pouvez commencer par ne pas abuser de LDFLAGS pour les bibliothèques. LDFLAGS est pour linker drapeaux. Utilisez foo_LDADD (pour les exécutables) ou foobar_LIBADD (lors de la création d'une bibliothèque) pour lister les bibliothèques de liens. En outre, exécuter pkg-config dans Makefile.am est inutile et inutile. Il suffit d'utiliser:

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

libglfw_CFLAGS,LIBS est peuplée de cela dans configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

+0

Comment puis-je résoudre ce avec un makefile régulier, plutôt que autotools? Pour autant que je sache, make ne respecte pas LDADD (juste des autotools). –

+1

Suivi: Avec les makefiles réguliers, la solution est d'utiliser 'LOADLIBES = -lm' plutôt que' LDFLAGS = -lm'. –