Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
/usr/bin/ld: cannot find -lm
Envoyé par: GRONDIN

Bonjour,

Je suis sous une Mandrakelinux 10.1 et un noyau 2.6.8.1.

J'ai essayé de compiler l'application suivante libvorbis-1.0.1.
La commande ./configure s'est bien passée.

En revanche le "make" me retourne l'erreur suivante :
make[1]: Entering directory `/home/bertrand/Documents/prg/libvorbis-1.0.1/examples'
/bin/sh ../libtool --mode=link gcc -O20 -ffast-math -mno-ieee-fp -D_REENTRANT -fsigned-char -DUSE_MEMORY_H -all-static -o decoder_example decoder_example.o ../lib/libvorbis.la -lm -logg
gcc -O20 -ffast-math -mno-ieee-fp -D_REENTRANT -fsigned-char -DUSE_MEMORY_H -static -o decoder_example decoder_example.o ../lib/.libs/libvorbis.a -lm -logg
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
make[1]: *** [decoder_example] Erreur 1
make[1]: Leaving directory `/home/bertrand/Documents/prg/libvorbis-1.0.1/examples'
make: *** [all-recursive] Erreur 1

J'ai essayé de rechercher dans les moteurs de recherche si un problème similaire a été trouvé, mais rien dans mon cas avec "cannot find -lm". Des messages similaires dont j'ai regardé la solution, ne concerne en rien mon problème. ?-(

Je pense qu'il manque une librairie ou bien un lien symbolique dans /usr/bin

Deux questions :
- à quoi sert la commande ld ?
- avez-vous des pistes à me suggérer ?

Cela fait plus de trois mois que je me suis initié à LINUX, je ne peux plus m'en passer deye rolling smiley

Un grand merci d'avance.





Poste le Sunday 2 January 2005 14:06:53
Répondre     Citer    
Re: /usr/bin/ld: cannot find -lm
Envoyé par: d-jo

Ça t'aidera pas à compiler mais :

[joris@jojo joris]$ urpmq libvorbis
Les paquetages suivants contiennent libvorbis :
libvorbis0
libvorbis0-devel
libvorbisenc2
libvorbisfile3


[joris@jojo joris]$ urpmq -i libvorbis0
Name : libvorbis0
Version : 1.0.1
Release : 5mdk
Group : System/Libraries
Size : 174662 Architecture: i586
Summary : Main library for libvorbis

tu as donc chez Mandrake tout les rpm dont tu as besoin

Poste le Monday 3 January 2005 17:46:14
Répondre     Citer    
Re: /usr/bin/ld: cannot find -lm
Envoyé par: GRONDIN

Merci pour ces infos.;-p

Mais le problème demeure si une autre compil rencontrerait la même anomalie. yawning smiley)

Bonne année quand même.O:-)

Poste le Monday 3 January 2005 18:20:47
Répondre     Citer    
Re: /usr/bin/ld: cannot find -lm
Envoyé par: Sve@r

L'option "-l<qqchose>" est un raccourci vers "/usr/lib/libqqchose.a"
L'option "-lm" cherche à relier le fichier "/usr/lib/libm.a" à ton programme. Ce fichier est en fait la librairie mathématiques. Il contient le code des fonctions de maths comme "sqrt" ou "sin" ou "cos".
C'est grâce à ce fichier que si tu appelles la fonction "sqrt()" (racine carrée) dans ton programme, le programme saura quoi faire pour exécuter la fonction "sqrt". Il est probable que ce fichier "libm.a" manque chez toi...

La commande "ld" sert à faire l'édition des liens. Un programme peut être composé de plusieurs sources. Un source contient la fonction ceci, un autre contient la fonction "cela" et un troisième source fait appel aux deux fonctions "ceci" et "cela". La compilation se fait alors en 2 phases
1) chaque source est indépendamment vérifié syntaxiquement et traduit en module objet
2) l'ensemble des modules objets est lié entre eux pour produire ton exécutable. Lors de cette édition de liens, le compilateur intègre en plus les fonctions qui se trouvent dans les librairies particulières (style "/usr/lib/libm.a"). C'est à toi d'indiquer au compilateur d'inclure ces librairies. Le compilateur appelle lui-même le programme "ld" qui va établir les liens.

Exemple:
Tape ce source "pgm.c"
main()
{
fonctionEssai();
}

Tape ce source "essai.c"
void fonctionEssai()
{
printf("Bonjour\n");
}

1) création du module objet pour chaque source
cc -c pgm.c
cc -c essai.c
=> tu obtiendras un fichier "pgm.o" et un fichier "essai.o"

2) edition de liens
cc essai.o pgm.o -o pgm
=> tu obtiendras un exécutable incluant les 2 modules objets

3) si ton programme "pgm" avait besoin, pour fonctionner, d'inclure une fonction de la librairie mathématiques "/usr/lib/libm.a", tu compilerais alors en faisant
cc essai.o pgm.o /usr/lib/libm.a -o essai
ou bien (raccourci)
cc essai.o pgm.o -lm -o essai

Poste le Monday 3 January 2005 18:30:49
Répondre     Citer    
Re: /usr/bin/ld: cannot find -lm
Envoyé par: GRONDIN

En effet, libm.a est manquante en faisant un locate.

Ceci fait sérieusement avancer le schmilblik.

Merci pour ces renseignements. je vais aller à la pèche pour trouver la librairie en question. ];-)

Poste le Monday 3 January 2005 20:54:49
Répondre     Citer    
Re: /usr/bin/ld: cannot find -lm
Envoyé par: d-jo

installe le paquet glibc-static-devel

Poste le Monday 3 January 2005 22:31:16
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
/usr/bin/ld: cannot find -lm
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons