IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Argument -lm, que signifie-t-il ?


Sujet :

C

  1. #1
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut Argument -lm, que signifie-t-il ?
    Salut,

    Dans cette ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o dcraw -O4 dcraw.c -lm -ljasper -ljpeg -llcms
    Que signifie -lm ?

    Sans -lm la compilation se passe aussi bien mais je ne sais pas encore tester le résultat dans son entièreté.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ça signifie lier à la bibliothèque mathématique. Sans ça, les fonctions de <math.h>, ainsi que certaines opérations sur les nombres à virgule flottante, sont inaccessibles.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ha oui, merci.

    N'ayant pas de lib m.h dans mon /include ça m'intriguait.

  4. #4
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,
    l'option -l sert lors de l'édition des liens à spécifier des bibliothèques dans lesquels l'éditeur de lien va (en gros) chercher le code des fonctions appelées pour les quelles il n'a pas encore de code. Si tu donnes l'option -lTRUC, l'éditeur de liens va chercher une bibliothèque se nommant libTRUC statique (.a) ou dynamique (.so) dans les répertoires par défaut. Tu peux spécifier d'autres répertoires à chercher avec l'option -L.
    L'ordre dans le quel tu spécifies les bibliothèques est important, et c'est en général une bonne idée de mettre la libm à la fin.
    Remarque que lorsque tu produis un exécutable il sera forcément lié à la libc (le -lc est implicite). On a tendance à dire que la libc est l'implémentation de la bibliothèque standard du C telle que définie par la norme (C11 en ce moment). Cela est vrai, mais en partie seulement. Les fonctions mathématiques font partie de la bibliothèque standard, mais, pour d'obscures et antiques raisons, elles sont souvent regroupées dans une bibliothèque à part nommée de facto libm.
    C'est un choix d'implémentation que les dèv de la gnu libc ont pris. Il existe d'autres implémentations de la bibliothèque standard C comme musl, et les dèv de musl ont pris comme choix de tout placer dans la bibliothèque libc.
    Il y a un effet similaire avec le standard POSIX, souvent intégré en grande partie dans la libc sauf pour les fonctions «real time» regroupées dans la librt.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par VinsS Voir le message
    N'ayant pas de lib m.h dans mon /include ça m'intriguait.
    Il n'y a aucune correspondance forcée entre les fichiers d'en-tête et les bibliothèques:
    • La bibliothèque standard du C (libc) définit des fonctions qui sont déclarés dans de nombreux fichiers d'en-tête différents.
    • À l'inverse l'API Windows déclare pratiquement toutes ses fonctions en incluant <windows.h> (qui se charge d'inclure la plupart des nombreux autres fichiers d'en-tête Windows) alors qu'elles sont définies dans des bibliothèques diverses et variées.
    • Mais il est vrai que beaucoup de bibliothèques sont livrées simplement avec un fichier d'en-tête du même nom.

    L'ordre dans le quel tu spécifies les bibliothèques est important
    C'est le cas de GCC et de la plupart des compilos pour les plate-formes unixoïdes, mais ce n'est pas le cas de Visual C++ pour Windows.
    Cela a ses avantages et ses inconvénients: L'avantage est qu'on n'a pas à se soucier de l'ordre, l'inconvénient est qu'on ne peut pas avoir de fonctions "facultatives" dans le programme principal, qui défaultent sur la version de la bibliothèque si elles ne sont pas présentes (car Visual C++ donnera une erreur "duplicate symbol" s'il trouve la fonction est définie à la fois dans le programme principal et dans une bibliothèque; il protestera aussi si deux bibliothèques définissent la même fonction).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/07/2016, 21h06
  2. [1.x] Que signifie l'argument (Doctrine_Query $q = null)
    Par liryks_6 dans le forum Symfony
    Réponses: 1
    Dernier message: 07/12/2011, 01h14
  3. [SQL6]Que signifie ce LEFT ?
    Par guy2004 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/01/2005, 19h18
  4. Que signifie Pagesize ?
    Par anthony70 dans le forum Débuter
    Réponses: 3
    Dernier message: 31/08/2004, 13h31
  5. Que signifier $0 et $@
    Par jaabouc dans le forum Linux
    Réponses: 6
    Dernier message: 01/06/2004, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo