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

Linux Discussion :

Erreur au linkage


Sujet :

Linux

  1. #1
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut Erreur au linkage
    Bonjour,

    Je suis un débutant en C, mais pas en programmation en général.
    Étant donné que je ne pense pas que le problème vienne du code lui-même mais d'un problème de package ou autre, j'ai posté ici et non sur le forum C.

    Mon code (très simple) m'a l'air correcte mais ne compile pas (ou plutôt ne link pas).

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <openssl/sha.h>
     
     
    int main(void) {
    	unsigned char md[SHA_DIGEST_LENGTH];
    	unsigned char buffer[] = "test";
     
    	SHA1(buffer, sizeof(buffer)-1, md);
     
    	return 0;
    }
    Le prototype de la fonction SHA1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char *SHA1(const unsigned char *d, unsigned long n, unsigned char *md);
    Et les erreurs que gcc me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    % gcc bf.c -Wall -o bf
    /tmp/cckCReCX.o: dans la fonction « main »:
    bf.c:(.text+0x44): référence indéfinie vers « SHA1 »
    collect2: ld returned 1 exit status
    zsh: exit 1     gcc bf.c -Wall -o bf
    Je précise que je suis sous debian etch et que les package libssl et libssl0.9.8.

    Est-ce-que vous sauriez pourquoi j'ai cette erreur et comment la résoudre ?

    Merci d'avance.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Comme d'habitude... Il faut indiquer à gcc la bibliothèque à utiliser et où elle se trouve...
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -W -Wall toto.c -o toto -lmylib -L/usr/local/lib
    Ici, gcc fera le lien avec /usr/local/lib/libmylib.so (ou .a si le .so n'existe pas).

  3. #3
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Merci bien l'ami.
    Juste une petite correction, c'est pas gcc qui fait le lien avec /usr/local/lib/libmylib.so, mais ld (par défaut). Gcc ne fait que transmettre des options à ld.

    voilà
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Celelibi
    Juste une petite correction, c'est pas gcc qui fait le lien avec /usr/local/lib/libmylib.so, mais ld (par défaut). Gcc ne fait que transmettre des options à ld.
    Hmm, monsieur est un puriste En effet, c'est bien ld (link editor) qui fait l'édition de lien. Pendant qu'on y est, c'est cpp (C pre-processor) qui parse d'abord les fichiers sources à la recherche des directives commencant par # (et supprime les commentaires, si je me souviens bien).

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

Discussions similaires

  1. Erreur de linkage avec js externe
    Par fofovi72 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/08/2006, 10h33
  2. Erreur au linkage de la zlib en static
    Par Flo. dans le forum C++
    Réponses: 10
    Dernier message: 05/05/2006, 09h23
  3. Erreur de linkage d'une Dll
    Par Hokagge dans le forum MFC
    Réponses: 1
    Dernier message: 30/03/2006, 14h48
  4. Erreur de Linkage GMP
    Par youbyoub dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 05/03/2006, 13h31
  5. Membres statiques d'une classe et erreur de linkage
    Par Neilos dans le forum C++Builder
    Réponses: 10
    Dernier message: 09/02/2006, 23h06

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