Problème LDFLAGS à la compilation Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
Valter
Messages : 2
Inscription : 11 sept. 2022, 12:03
Status : Hors-ligne

Bonjour à tous,
J'essaie de compiler une application sur Debian 11, mais j'ai un problème lors de l'édition des liens : gcc ne parvient pas à trouver les bibliothèques partagées (par exemple libsqlite3.so.0). Pour illustrer mon problème, cet exemple de programme avec son Makefile

Code : Tout sélectionner

/* foo.c */
#include <sqlite3.h>
#include <stdio.h>

int main(void) {
    
    printf("%s\n", sqlite3_libversion()); 
    
    return 0;
}
et le Makefile associé

Code : Tout sélectionner

CFLAGS = -I/usr/include -Wall
LDFLAGS = -lsqlite3 -L/usr/lib/x86_64-linux-gnu -L/usr/lib

all:
	gcc $(CFLAGS) $(LDFLAGS) foo.c -o foo
J'obtiens le message d'erreur suivant:

Code : Tout sélectionner

valter@debian:~# make
gcc -I/usr/include -Wall -lsqlite3 -L/usr/lib/x86_64-linux-gnu -L/usr/lib foo.c -o foo
/usr/bin/ld : /tmp/cc0yzZNg.o : dans la fonction « main » :
foo.c:(.text+0x5) : référence indéfinie vers « sqlite3_libversion »
collect2: error: ld returned 1 exit status
make: *** [Makefile:5 : all] Erreur 1
Bien sûr, la fonction sqlite3_libversion est bien présente dans bibliothèque partagée:

Code : Tout sélectionner

valter@debian:~# nm -gD /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 | grep sqlite3_libversion
00000000000132d0 T sqlite3_libversion
00000000000132e0 T sqlite3_libversion_number
Ça compile sans problème sur d'autres OS (Rocky Linux 8 (gcc 8.5.0), macOS et FreeBSD(LLVM)). Y'a t-il des particularités sur Debian pour l'édition des liens?
Toute aide sera appréciée.
Cordialement
Valter
Messages : 2
Inscription : 11 sept. 2022, 12:03
Status : Hors-ligne

Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 4958
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : En ligne

Valter a écrit : 11 sept. 2022, 14:59 Problème résolu ici https://forums.debian.net/viewtopic.php?f=8&t=152808

Merci pour ton retour.
You can postpone the LDFLAGS after the object file you have to link to the library, for example:

Code : Tout sélectionner

CFLAGS = -I/usr/include -Wall
LDFLAGS = -lsqlite3 -L/usr/lib/x86_64-linux-gnu -L/usr/lib

all:
        $(CC) $(CFLAGS) -Os -c foo.c -o foo.o
        $(CC) foo.o -o foo $(LDFLAGS)
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
Répondre