Bonjour,
Je butte depuis plusieurs heures sur un problème, où j'en suis convaincu, il ne manque qu'un petit détail.
J'ai un fichier testLib.c et un fichier d'entête testLib.h pour créer une biblio libtestLib.so
testLib.c :
#include "testLib.h"
int addition(int a, int b) {
return a+b;
}
testLib.h :
int addition(int a, int b);
Pour compiler, j'utilise les commandes suivantes :
rm -f testLib.o
gcc -fomit-frame-pointer -O3 -Wunreachable-code -Wextra -Wall -std=gnu17 -fPIC -m64 -march=native -mtune=native -c -o testLib.o testLib.c
rm -f libtestLib.so
gcc -shared -s -o libtestLib.so testLib.o
Le résultat est le fichier libtestLib.so de 14040 octets.
En faisant nm -D libtestLib.so
, j'obtiens :
0000000000001100 T addition
w __cxa_finalize
w __gmon_start__
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
Pour utiliser cette bibliothèque, le fichier source useTestLib.c fait l'affaire :
#include <stdio.h>
#include "testLib.h"
int main(void) {
printf("%d\n", addition(2, 3));
return 0;
}
Pour compiler :
rm -f useTestLib.o
gcc -fomit-frame-pointer -O3 -m64 -Wunreachable-code -Wextra -Wall -std=gnu17 -m64 -march=native -mtune=native -c -o useTestLib.o useTestLib.c
rm -f useTestLib
gcc -s -L. -ltestLib -o useTestLib useTestLib.o
Et là, c'est le drame :
/usr/bin/ld : useTestLib.o : dans la fonction « main » :
useTestLib.c:(.text.startup+0x13) : référence indéfinie vers « addition »
collect2: error: ld returned 1 exit status
Merci de m'avoir lu jusqu'ici. Si en plus, vous aviez une idée…
# Il manque `testLib.o`
Posté par Cyril Brulebois (site web personnel) . Évalué à 4.
Étant donné que compilation et édition de liens sont découplées ici, il faut penser à indiquer
testLib.o
sur la dernière ligne.Alternativement, ceci fait le job en une passe :
Debian Consultant @ DEBAMAX
[^] # Re: Il manque `testLib.o`
Posté par DebutantC . Évalué à 3.
Merci de ta réponse.
Mais pourquoi manquerait-il testLib.o ?
C'est libtestLib.so que je veux utiliser !
# L'ordre des paramètres !
Posté par DebutantC . Évalué à 4. Dernière modification le 21 janvier 2024 à 18:51.
P'tain, je viens de trouver !
C'est l'ordre des paramètres dans l'édition de liens.
Alors là, je suis sur le cul !
Au lieu de :
il faut :
Et tout fonctionne !
# Merci
Posté par DebutantC . Évalué à 4.
C'est la réponse de Cyril Brulebois qui m'a fait essayer les paramètres dans l'ordre de sa proposition.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.