[C] Problème de linkage de librairie avec gcc

p4bl0

Membre expert
Club iGen
12 Juillet 2004
4 772
423
36
$PWD
p4bl0.net
Hello !

J'ai fait une petit lib static qui parse les options de la ligne de commande et permet d'y accéder facilement, ça marche bien et ça compile bien, mais je sais pas pourquoi quand j'essaye de linker la lib pas directement ça plante.

Voilà les opérations réalisées :
création de la lib :
Bloc de code:
gcc -c -ansi -W -Wall hipopt.c
ar rcs libhipopt.a hipopt.o

ça ça marche bien :-).

Ensuite je copie la lib dans un autre dossier :
Bloc de code:
cp libhipopt.a /home/p4bl0/dev/lib/libhipopt.a
Je copie aussi le fichier hipopt.h dans /home/p4bl0/dev/headers

Ensuite, j'ai fais un petit prog de test qui utilise hipopt. Si je le compile comme ça ça marche niquel :
Bloc de code:
gcc -ansi -W -Wall -I/home/p4bl0/dev/headers hipoptest.c /home/p4bl0/dev/lib/libhipopt.a -o hoptest
Tout se passe bien (j'ai juste un warning que je trouve con d'ailleurs... "hipoptest.c:5: warning: unused parameter ‘argc’". Mais c'est pas le problème.

Le problème c'est que si je fais ça ça ne marche pas :
Bloc de code:
gcc -ansi -W -Wall hipoptest.c -static -L/home/p4bl0/dev/lib -lhipopt -I/home/p4bl0/dev/headers -o hoptest
GCC me dit ça du coup :
Bloc de code:
hipoptest.c:5: warning: unused parameter ‘argc’
/tmp/cc6RqTCi.o: In function `main':
hipoptest.c:(.text+0x18): undefined reference to `hopt_init'
hipoptest.c:(.text+0x59): undefined reference to `hopt_get'
hipoptest.c:(.text+0xa3): undefined reference to `hopt_isset'
hipoptest.c:(.text+0xd3): undefined reference to `hopt_free'
collect2: ld returned 1 exit status
make: *** [test] Erreur 1

Et je comprends pas bien pourquoi, mais c'est la première fois que je fais moi même une lib, donc il y a peut-être des chose que je ne fais pas bien :heu:

Merci !
 
:eek:
Je savais pas que l'ordre des arguments de GCC pouvait faire ça !
Ça marche si je met le "-I/home/p4bl0/dev/headers" avant ce qui concerne la lib

Bloc de code:
[B]$[/B] gcc -ansi -W -Wall hipoptest.c -I/home/p4bl0/dev/headers -static -L/home/p4bl0/dev/lib -lhipopt -o hoptest
hipoptest.c:5: warning: unused parameter ‘argc’
[B]$[/B] hoptest -abc -d --foo="bar baz quux" -p PROUT --toto pipicaca -- -z --test
options->opts[0]: hopt_get("a") => set
options->opts[1]: hopt_get("b") => set
options->opts[2]: hopt_get("c") => set
options->opts[3]: hopt_get("d") => set
options->opts[4]: hopt_get("foo") => bar baz quux
options->opts[5]: hopt_get("p") => PROUT
options->opts[6]: hopt_get("toto") => pipicaca
options->count => 7
[B]$[/B]


EDIT: si vous avez des remarques à faire, ou si ça vous intéresse : http://code.google.com/p/hipopt/ :-)
 
Bonjour pablo concernant le linkage des libs static c'est un bug de gcc4
desole je n'avais pas vu le message j'aurais pu te depaner avant

aussi quand tu link contre un objet static passe l'option du language

ca fait aussi partie du bug
 
Bonjour pablo concernant le linkage des libs static c'est un bug de gcc4
desole je n'avais pas vu le message j'aurais pu te depaner avant

aussi quand tu link contre un objet static passe l'option du language

ca fait aussi partie du bug
Mais y a pas de soucis ^^

Ça me rassure parce je ne vois nul part dans les pages de man que l'ordre des arguments est importants !
L'option dont tu parles c'est bien '-x c' ? Hop je l'ajoute au Makefile :)

Merci !