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 :

Creer et inserer bibliothèque


Sujet :

C

  1. #1
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut Creer et inserer bibliothèque
    Bonjour à tous,

    La je dois faire un projet pour le bahut (d'ailleurs bonjour à ma prof qui se reconnaitra rapidement si elle lit ce sujet ^^) et j'ai un problème au moment d'utilisé une bibliothèque que j'ai crée.

    J'ai créer une bib avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ar cur ../librairie/libnomDeMaBib.a nomDeMaBib.o
    J'usque la aucun problème.

    Mais au moment de l'utiliser dans un fichier C, ca ne marche plus.
    Je l'inclus via un .h avec cette ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <nomDeMaBib.h>
    C'est bien ca non ?
    Ensuite dans la compilation de mon .o j'ai le -I avec le chemin vers le .h
    Et lors de l'édition de lien j'ai un -L avec le chemin vers mon .a

    Est-ce que je me plante qque part ?

    Aparament il voit bien ma librairie quand meme car, quand je n'inclus pas ma <nomDeMaBib.h> il met une erreur de fichier non trouvé ... :/

    merci d'avance

    PS : j'espere que mon sujet est bien placé ^^

  2. #2
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    Ou alors y'a pas une technique pour tester le .a ...
    Histoire de voir s'il marche à merveille

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par L8O8L Voir le message
    Aparament il voit bien ma librairie quand meme car, quand je n'inclus pas ma <nomDeMaBib.h> il met une erreur de fichier non trouvé ... :/
    Là tu prouves juste que tu as bien inclus les définitions/prototypes des fonctions.

    Maintenant, il faut vérifier que ton binaire comprend bien la bibliothèque..

    -L donne le chemin.

    -l donne la bibliothèque elle-même

  4. #4
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    Merci de ta réponse.

    Comme je l'avais dit mon -I donne le chemin du repertoire contenant les includes et mon -L donne le chemin du repertoire contenant le .a et apres je fait bien -lnomDeMaBib

    Le truc aussi c'est que j'inclut le Glib et la pas de problème...

  5. #5
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    Pour vous eclairer il me met
    /media/disk/..../fonction.c:13: undefined reference to `fonctionDeLaBib'
    fonctionDeLaBib c'est donc une fonction qui est definie dans ma bibliiothèque ^^

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    Comme on te l'a dit :
    _ Tu as bien inclus les définitions de ton entete de lib avec -I
    _ Tu as bien ajouté un répertoire de recherche de lib avec -L
    MAIS tu n'as pas dit d'utiliser cette lib avec l'option -l, du coup :
    ton éditeur de lien ne trouve pas le code pour les fonctions auxquelles tu fais appels.
    ==> Tu ajoutes a ta ligne de compilation : -lnomDeMaBib

    Le Bonjour à ta prof !

    PS : n'oublie pas de marque ton sujet résolut.

  7. #7
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    Mdr ok, je lui passerai le bonjour,

    J'ai résolu mon problème.
    Merci à toi, mais j'ai oublié de le mettre que je le mettais aussi

    En fait dans ma compilation finale je devais rajouter -lm cheminBib/libbib.a

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par L8O8L Voir le message
    Mdr ok, je lui passerai le bonjour,

    J'ai résolu mon problème.
    Merci à toi, mais j'ai oublié de le mettre que je le mettais aussi

    En fait dans ma compilation finale je devais rajouter -lm cheminBib/libbib.a


    -lm indique la bibliothèque de maths

    ce serait

    -L chemin -lbib

    (le -l prend le nom de la bibliothèque après le suffixe lib..., et sans espaces)

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par L8O8L Voir le message
    En fait dans ma compilation finale je devais rajouter -lm cheminBib/libbib.a
    Normalement non, si tu as déjà défini le chemin avec -L

    Par contre la bonne syntaxe est

    qui ajoute libbib.a, de même que -lm (que tu utilises juste avant) ajoute libm.a ...

    Le principe des bibliothèques avec gcc est le suivant :

    - une bibliothèque <xxx> doit être générée dans un fichier s'appelant lib<xxx>.a
    - sur la ligne de commande de l'éditeur de lien (ld) :
    -- on précise le chemin avec -L<chemin>
    -- on ajoute au projet avec -l<xxx>

    http://emmanuel-delahaye.developpez....m#bibliotheque

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par L8O8L Voir le message
    Ou alors y'a pas une technique pour tester le .a ...
    Histoire de voir s'il marche à merveille
    Il faut l'utiliser dans un programme de test.

  11. #11
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    J'avoue que le fait d'ajouter -lm me parait vraiment louche en fait ...

    Quand j'ai mis -lm je ne savais pas que c'était exclusivement pour la lib de maths...

    Maintenant quand j'enlève le -lm ca marche ... Alors que j'avais rien changer de spécial. Le C c'est vraiment ******* (marrant )

    En tout cas merci beaucoup

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par L8O8L Voir le message
    J'avoue que le fait d'ajouter -lm me parait vraiment louche en fait ...

    Quand j'ai mis -lm je ne savais pas que c'était exclusivement pour la lib de maths...

    Maintenant quand j'enlève le -lm ca marche ... Alors que j'avais rien changer de spécial. Le C c'est vraiment ******* (marrant )

    En tout cas merci beaucoup
    Ce n'est pas le C, c'est gcc et sa syntaxe.

    Les bibliothèques sont prises dans l'ordre..

    Si MaLib fait appel a des fonctions de maths, la biblothèque de maths doit être APRES MaLib, pour que le linker résolve les adresses d'appel. Si le -lm est fourni AVANT MaLib, le linker charge les références à la biblothèque de maths figurant avant d'utiliser MaLib. Pas celles figurant exclusivement dans MaLib.

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

Discussions similaires

  1. creer une bibliothèque statique perso
    Par senvedgi dans le forum Dev-C++
    Réponses: 0
    Dernier message: 05/08/2012, 14h39
  2. Bibliothèque pour creer des Maps
    Par nicotine002 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/07/2007, 09h32
  3. Réponses: 19
    Dernier message: 24/05/2002, 16h36
  4. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  5. Bibliothèques et documentation
    Par Anonymous dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/04/2002, 12h24

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