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 :

Compilation : problème pour lier une librairie


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut Compilation : problème pour lier une librairie
    Bonjour,

    Je suis en train de développer un programme en C qui doit utiliser une librairie écrite en C (pas de problème de compatibilité C/C++ ^^). Dans mon programme, j'utilise les fonctions :
    xc_interface_open(xentoollog_logger*, xentoollog_logger*, unsigned int);
    xc_map_foreign_pages(xc_interface_core*, unsigned int, int, unsigned long const*, int);
    xc_interface_close(xc_interface_core*);
    Ces fonctions se trouvent dans la librairie libxenctrl.so :
    0000000000016ed6 T xc_interface_close
    0000000000016de9 T xc_interface_open
    000000000001e656 T xc_map_foreign_pages
    Lorsque je compile mon appli, je passe la librairie (j'ai mis le chemin absolu pour être certain de la librairie utilisée) :
    gcc gntring3_read_async.c /home/fremals/GVirtus9/modules/gntring/libgntring4.o /usr/local/lib/libxenctrl.so -o ring3_read_async -lm -I /home/fremals/GVirtus9/modules/
    Mais lors de la compilation, ld ne trouve pas les fonctions citées :
    /home/fremals/GVirtus9/modules/gntring/libgntring4.o: dans la fonction « connect_ring »:
    libgntring4.c:(.text+0x328): référence indéfinie vers « xc_interface_open(xentoollog_logger*, xentoollog_logger*, unsigned int) »
    libgntring4.c:(.text+0x348): référence indéfinie vers « xc_map_foreign_pages(xc_interface_core*, unsigned int, int, unsigned long const*, int) »
    libgntring4.c:(.text+0x365): référence indéfinie vers « xc_interface_close(xc_interface_core*) »
    collect2: error: ld returned 1 exit status
    Est-ce que quelqu'un a une idée du problème ?

    Merci !!

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Une bibliothèque ne se passe pas par /usr/local/lib/libxenctrl.so
    mais avec -L/usr/local/lib -lxenctrl

    le -L n'est pas forcément nécessaire, dans ce cas, car ld peut déjà avoir /usr/local/lib dans ses dossiers normaux.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    J'ai passer la librairie en chemin absolu pour être sûr de la version utilisée. Avec l'option -l, c'est le système qui cherche où se trouve la librairie dans un ensemble de répertoire prédéfini (et il est effectivement possible d'indiquer d'autres répertoires où chercher la librairie). Mais au final, le résultat est le même. J'ai déjà essayé d'utilisé l'option -l, mais le résultat était le même. Comme c'est une librairie fournie avec l'installation de Xen, le système utilise de base /usr/local/lib/libxenctrl.so. J'ai recompilé la librairie dans un dossier perso, au cas où un problème serait survenu lors de l'installation de Xen, et je travaille avec les liens absolu pour être sûr des version utilisées à la compilation.

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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Bonjour,
    l'ordre aussi est important :

    gcc gntring3_read_async.c /usr/local/lib/libxenctrl.so /home/fremals/GVirtus9/modules/gntring/libgntring4.o -o ring3_read_async -lm -I /home/fremals/GVirtus9/modules/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    J'ai essayé mais ça ne fonctionne pas non plus :/

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

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Je suppose que le «ça ne fonctionne pas non plus» signifie que tu as les mêmes messages d'erreurs ?
    Déjà pour décanter un peu les choses je te propose une vraie compilation séparée. Crée un petit makefile.
    Ensuite regarde aussi du côté de l'option rpath du linker peut-être.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Effectivement, les erreurs sont toujours les même. Un makefile ne change rien non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    gntring3_read_async.o : gntring3_read_async.c
    	gcc -c gntring3_read_async.c -o gntring3_read_async.o -I /home/fremals/GVirtus9/modules/
     
    gntring3_read_async : gntring3_read_async.o
    	gcc gntring3_read_async.o -lxenctrl /home/fremals/GVirtus9/modules/gntring/libgntring4.o -o ring3_read_async -lm
    Il ne s'agit pas non plus d'une erreur de chemin. Le compilateur trouve correctement la librairie. Ce sont les symboles à l'intérieur de la librairie qu'il ne trouve pas. Je ne vois pas du tout comment cette partie du procédé fonctionne et ce qui pourrait empêcher de trouver les symbole.

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Es-tu certain d'avoir les en-têtes de la même version que le .so que tu utilises?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Le problème a été résolu. libgntring4 est compilé avec g++, d'où le problème pour utiliser les fonctions C. Bizarre que ça fonctionnait avant le reformatage du pc. Les mystères de l'informatique ^^ Merci pour votre aide en tout cas !!

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Merci de cliquer sur le bouton en bas de page si vous n'avez plus de questions sur ce sujet.

    Bonne journée.

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

Discussions similaires

  1. [Visual C++ 2010] Problème pour linker une librairie
    Par CleeM dans le forum Visual C++
    Réponses: 9
    Dernier message: 30/08/2012, 16h22
  2. Problème pour lier des extensions à une application
    Par blandinais dans le forum Windows 7
    Réponses: 4
    Dernier message: 27/12/2011, 11h51
  3. Réponses: 1
    Dernier message: 20/12/2010, 22h43
  4. Problème pour lier un valeur saisie avec une requête.
    Par jejeapollo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/08/2007, 12h56
  5. Problème pour lier une librairie... (ANTLR)
    Par loupdeau dans le forum MFC
    Réponses: 4
    Dernier message: 03/06/2005, 10h12

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