Bonjour,
Je développe depuis quelques temps une bibliothèque contenant plein de fonctions qui me servent pour l'ensemble de mes programmes en C (gcc sous Linux).
Elle était jusque là compilé en tant que bibliothèque dynamique, mais j'aimerai avoir la possibilité de la compiler statiquement dans un de mes programmes.
J'ai modifié mon makefile pour générer une archive ar contenant l'ensemble de mes fichiers objets tel que:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| nm libFlo.a
Fmath.o:
00000000000000bf T Fipaire
000000000000005c T Flgint
0000000000000000 T Fpuiss
U _GLOBAL_OFFSET_TABLE_
Fchaine.o:
0000000000000848 T F_cmaj
000000000000086c T F_cmin
0000000000000890 T F_snombre
000000000000096f T Fchaine_hex
00000000000003fb T Fftoa
00000000000008fa T Fhex_int
0000000000000000 R Fhexa_table
000000000000030f T Fitoa
U Flgint
U Fmalloc_meta
00000000000002cf T Fmemset
0000000000000530 T Fnb_c
000000000000058f T Fnb_str
[sortie tronquée] |
Et pourtant, quand je compile mon programme de test, ça plante à l'édition de lien, par exemple:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| gcc -Wall -Wextra -O -g -static -L. -lFlo Ftest.c -o Ftest-statique
/tmp/ccXpImbY.o: In function `comparaison_qsort_str':
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:350: undefined reference to `Fstrlen'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:350: undefined reference to `Fstrlen'
/tmp/ccXpImbY.o: In function `Exemple_Fitoa':
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:44: undefined reference to `Fitoa'
/tmp/ccXpImbY.o: In function `Exemple_Fsplitstr':
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:55: undefined reference to `Fsplitstr'
/tmp/ccXpImbY.o: In function `Exemple_Fstring':
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:69: undefined reference to `Fstring_init'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:70: undefined reference to `Fstring_adds'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:72: undefined reference to `Fstring_maj'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:74: undefined reference to `Fstring_net'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:76: undefined reference to `Fstring_addc'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:77: undefined reference to `Fstring_cp'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:78: undefined reference to `Fstring_adds'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:80: undefined reference to `Fstring_min'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:82: undefined reference to `Fstring_ins'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:84: undefined reference to `Fstring_adds'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:85: undefined reference to `Fstring_addi'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:87: undefined reference to `Fstring_adds'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:88: undefined reference to `Fstring_addf'
/mnt/Serveur-home/Developpement/C/libFlo/Ftest.c:91: undefined reference to `Fstring_sprintf' |
J'ai essayé toute sorte de chose, comme compiler dynamiquement avec la libc mais en liant manuellement l'archive ar:
gcc -Wall libFlo.a Ftest.c -o Ftest-statique
Mais j'ai exactement le même problème.
Est ce que quelqu'un a la moindre idée ?
J'ai pensé que ça venait peut être de mon archive ar, parce la compilation statique marche très bien avec la librairie standard !
Merci d'avance pour toute aide ou retour d'expérience.
Partager