Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/04/2020, à 18:47

DetreBenjamin

édition de liens de bibliothèque statique (.a) avec gcc.

Bonjour,

Je me suis remis depuis peu au langage c alors j'ai voulu compiler un petit bout de code linké avec une bibliothèque statique en .a.
Mais gcc m'a répondu "Référence indéfinie vers bonjour", bonjour étant une fonction de ma bibliothèque.
Pour info, j'ai un dossier include ou sont les en-têtes .h, sinon le reste (bonjour.c, la bibliothèque .a et main.c) sont dans le même dossier que include.

Voici mon main.c

#ifndef stdio_h
#define stdio_h
#include <stdio.h>
#endif

#ifndef stdlib_h
#define stdlib_h
#include <stdlib.h>
#endif

#ifndef bonjour_h
#define bonjour_h
#include "bonjour.h"
#endif

int main(int argc, char const *argv[])
{
	printf("Bonsoir\n");
	bonjour();
	return 0;
}

bonjour.c :

#ifndef stdio_h
#define stdio_h
#include <stdio.h>
#endif

#ifndef stdlib_h
#define stdlib_h
#include <stdlib.h>
#endif

#ifndef bonjour_h
#define bonjour_h
#include "bonjour.h"
#endif

void bonjour(void)
{
	printf("bonjour !\n");
}

bonjour.h :

void bonjour(void);

Voici les étapes que j'ai faites :

$ gcc -I./include -c bonjour.c
$ ar crs libbonjour.a bonjour.o
$ gcc -I./include -L./ -lbonjour main.c

Voici l'erreur :

/usr/bin/ld : /tmp/cciLotbk.o : dans la fonction « main » :
main.c:(.text+0x20) : référence indéfinie vers « bonjour »
collect2: error: ld returned 1 exit status

En essayant avec bonjour.o, sa marche mais pas avec .a.
Peut être est-ce l'indexage avec ar car je ne m'y connais pas trop sur sa.

Je suis bloqué depuis 12h, sa tombe l'erreur est basique mais j'avoue être perdu.
Ps: Je suis sur ubuntu 20.04

Dernière modification par DetreBenjamin (Le 30/04/2020, à 20:39)

Hors ligne

#2 Le 30/04/2020, à 19:44

grigouille

Re : édition de liens de bibliothèque statique (.a) avec gcc.

gcc -I./include  main.c -L. -lbonjour

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#3 Le 30/04/2020, à 19:49

DetreBenjamin

Re : édition de liens de bibliothèque statique (.a) avec gcc.

Merci, c'est tout con smile

Hors ligne

#4 Le 30/04/2020, à 20:39

DetreBenjamin

Re : édition de liens de bibliothèque statique (.a) avec gcc.

J'ai un autre problème.
Cette fois ci  j'ai mis le .a dans le dossier lib, mais quand je fais cette commande :

$ gcc -I./include -L./lib -lbonjour -Wall src/main.c

j'ai de nouveau l'erreur suivante :

/usr/bin/ld : /tmp/cc4gvUJI.o : dans la fonction « main » :
main.c:(.text+0x20) : référence indéfinie vers « bonjour »
collect2: error: ld returned 1 exit status

Hors ligne

#5 Le 30/04/2020, à 21:34

grigouille

Re : édition de liens de bibliothèque statique (.a) avec gcc.

$ gcc -I./include src/main.c -L./lib -lbonjour

Dernière modification par grigouille (Le 30/04/2020, à 21:35)


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#6 Le 30/04/2020, à 22:11

DetreBenjamin

Re : édition de liens de bibliothèque statique (.a) avec gcc.

Ok, je verrai sa demain.

Hors ligne

#7 Le 01/05/2020, à 02:41

DetreBenjamin

Re : édition de liens de bibliothèque statique (.a) avec gcc.

Ok sa marche merci, mais j'aimerais bien comprendre pourquoi il faut mettre la bibliothèque après les .c ?

Hors ligne