Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

cannot find -lm

11 réponses
Avatar
Florent Monnier
Bonsoir,

Quelle option manque-t-il à gcc sur la ligne de commande lorsque l'on
obtient cette erreur :

"""
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
Error during linking
"""


--
merci

10 réponses

1 2
Avatar
Emmanuel Delahaye
Quelle option manque-t-il à gcc sur la ligne de commande lorsque l'on
obtient cette erreur :

"""
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
Error during linking
"""


Une option -L<libpath> qui indique le chemin de la bibliothèque libm.a

--
A+

Emmanuel Delahaye

Avatar
Florent Monnier
Quelle option manque-t-il à gcc sur la ligne de commande lorsque l'on
obtient cette erreur :

/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
Error during linking


Une option -L<libpath> qui indique le chemin de la bibliothèque libm.a



Quel serait un emplacement typique de 'libm.a' ?

J'ai trouvé ceci :
/usr/lib/libm.so

Mais si j'ajoute '-L/usr/lib' à gcc, j'ai la même erreur.



--


Avatar
Emmanuel Delahaye
Quel serait un emplacement typique de 'libm.a' ?

J'ai trouvé ceci :
/usr/lib/libm.so

Mais si j'ajoute '-L/usr/lib' à gcc, j'ai la même erreur.


C'est l'endroit typique. Si il n'y a pas de libm.a, c'est qu'il a été
effacé ou mal installé. Je suggère un réinstallation de gcc. (version 4,
tant qu'à faire...)

Rien de tout cela n'a a voir avec le langage C...

--
A+

Emmanuel Delahaye

Avatar
Jean-Marc Bourguet
Florent Monnier writes:

Quelle option manque-t-il à gcc sur la ligne de commande lorsque l'on
obtient cette erreur :

/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
Error during linking


Une option -L<libpath> qui indique le chemin de la bibliothèque libm.a



Quel serait un emplacement typique de 'libm.a' ?

J'ai trouvé ceci :
/usr/lib/libm.so

Mais si j'ajoute '-L/usr/lib' à gcc, j'ai la même erreur.


Donne ta ligne de commande parce que gcc devrait trouver un
.so sauf si tu demandes explicitement de ne pas les
considérer.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Harpo
Florent Monnier wrote:

Quelle option manque-t-il à gcc sur la ligne de commande lorsque
l'on obtient cette erreur :

/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
Error during linking


Une option -L<libpath> qui indique le chemin de la bibliothèque
libm.a



Quel serait un emplacement typique de 'libm.a' ?

J'ai trouvé ceci :
/usr/lib/libm.so


C'est l'endroit le plus standard, les .a sont facultatifs et ne servent
que lorsqu'on veut linker de manière statique, généralement on linke
avec les .so (shared object)
Veille à linker de manière dynamique, en prenant un makefile au hasard,
je trouve :
CFLAGS = -W -Wall -fPIC -shared
LDFLAGS = -rdynamic
mais je pense que le défaut est de linker dynamiquement.
voir man gcc
Ou alors installe la libm.a pour linker statiquement (généralement peu
conseillé), si tu as installé 'à la main' partir d'un tar.gz, faire, si
tu as le password de root :
$ su -c 'make install-static'
Je ne suis pas du tout sûr de la cible 'install-static' mais ça doit
être quelque chose comme ça, voir le makefile.
Sinon, les libs statiques peuvent peut-être, suivant la distribution,
être dans un package différent

Mais si j'ajoute '-L/usr/lib' à gcc, j'ai la même erreur.


Ce n'est pas la peine de le préciser, /usr/lib et /lib sont je pense
toujours cherchées.

Si ça ne marche toujours pas, il peut y avoir plusieurs raisons à
l'erreur :

. libm.so est un lien symbolique cassé :
$ cd /usr/lib
$ file libm.so
devrait dire quelque chose comme ça :
libm.so: symbolic link to `/lib/libm.so.6`
voire même, mais ce serait étonnant :
libm.so: ELF <blah> shared object <blah>
si tu as 'broken', quelque chose comme ça :
libm.so: broken symbolic link to `/lib/libm.so.6`
désinstalle et réinstalle.

. Peut-être plus plausible, il n'y a pas eu de ldconfig après l'install
de la librairie, il peut être nécessaire de le faire à la main suivant
la manière dont on a installé :
$ man ldconfig
$ su -c '/sbin/ldconfig'
(il faut connaitre le password de root)

. Il peut peut-être y avoir d'autres raisons, mais comme ça, là, je ne
vois pas.
Si ça ne marche toujours pas, poste sur fr.comp.os.linux.moderated

--
http://patrick.davalan.free.fr/



Avatar
Florent Monnier
Donne ta ligne de commande parce que gcc devrait trouver un
.so sauf si tu demandes explicitement de ne pas les
considérer.


gcc -o 'graccota' -I'/usr/local/lib/ocaml' -static
'/home/blue_prawn/tmp/camlstartupf2bc08.o'
'/usr/local/lib/ocaml/std_exit.o' 'graccota.o'
'/usr/local/lib/ocaml/str.a' '/usr/local/lib/ocaml/unix.a'
'/usr/local/lib/ocaml/stdlib.a' '-L/usr/local/lib/ocaml' '-lstr'
'-lunix' '/usr/local/lib/ocaml/libasmrun.a' -lm -ldl


--

Avatar
Florent Monnier
C'est l'endroit typique. Si il n'y a pas de libm.a, c'est qu'il a été
effacé ou mal installé. Je suggère un réinstallation de gcc. (version 4,
tant qu'à faire...)


merci du conseil !


Rien de tout cela n'a a voir avec le langage C...


Je vous présente toutes mes excuses, je ne savais pas.
Dans quel forum aurais-je dus poster ?


--

Avatar
Florent Monnier
C'est l'endroit le plus standard, les .a sont facultatifs et ne servent
que lorsqu'on veut linker de manière statique, généralement on linke
avec les .so (shared object)


Effectivement j'essaie de linker de manière static car j'essaie de faire un
CGI-bin, et que lorsque je le compile en dynamique il ne trouve pas les
mêmes version des .so sur le serveur.

Je suis débutant. Peut-être que linker en static n'est pas la bonne solution
pour résoudre ce type de problème. (je n'ai pas tout ce qu'il faut sur le
serveur pour compiler dessus)


Ou alors installe la libm.a pour linker statiquement

(généralement peu conseillé),


Pourquoi est-ce peu conseillé ?


Sinon, les libs statiques peuvent peut-être, suivant la distribution,
être dans un package différent


Quel pourrait-être un nom classique un tel package ?


--

Avatar
Vincent Lefevre
Dans l'article <e116n5$ht1$,
Florent Monnier écrit:

Dans quel forum aurais-je dus poster ?


Celui concernant ta plateforme, le ld étant fourni avec l'OS, non?

--
Vincent Lefèvre - Web: <http://www.vinc17.org/&gt;
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/&gt;
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Jean-Marc Bourguet
Florent Monnier writes:

Donne ta ligne de commande parce que gcc devrait trouver un
.so sauf si tu demandes explicitement de ne pas les
considérer.


gcc -o 'graccota' -I'/usr/local/lib/ocaml' -static
'/home/blue_prawn/tmp/camlstartupf2bc08.o'
'/usr/local/lib/ocaml/std_exit.o' 'graccota.o'
'/usr/local/lib/ocaml/str.a' '/usr/local/lib/ocaml/unix.a'
'/usr/local/lib/ocaml/stdlib.a' '-L/usr/local/lib/ocaml' '-lstr'
'-lunix' '/usr/local/lib/ocaml/libasmrun.a' -lm -ldl


Je crois que les discussions paralleles ont deja montre que le
probleme etait l'edition statique.

Si tu veux de l'edition dynamique, il faut compiler et linker sur un
systeme avec la plus vieille version supportee, les fournisseurs d'OS
essayant alors que ca fonctionne assez bien (et voila pourquoi les
developpeurs dans l'industrie ont generalement -- cad dans tous les
endroits ou moi j'ai travaille -- de vieilles versions d'OS
installees).

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


1 2