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

Autres éditeurs Discussion :

[gcc] créer une bibliothèque partagée


Sujet :

Autres éditeurs

  1. #1
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut [gcc] créer une bibliothèque partagée
    Salut,
    je crois que je vais devenir dingue avec ce code!!!
    Alors, avant que le pc ne finisse par apprendre à voler, je viens chercher de l'aide sur le forum...
    Ma config : PC sous Linux, code : c, compilo : gcc.
    Voici donc mon soucis : j'essai de créer une bibliothèque partagée libOutil.so et un exécutable essai qui s'appuie dessus.
    Pour créer la lib, j'ai plusieurs fichiers .c et .h. Certains .c incluent des .h que j'ai fait et d'autres .h comme assrt.h, ou Xm/Xm.h.
    Pour compiler et linker j'utilise un makefile, en gros pour chaque .c (fic.c) j'utlise la règle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gcc -c -g -fPIC -std=c89 -ansi -Dxxx -o fic.o fic.c
    avec -Dxxx des flags de compil (exemple : -DLINUX)
    Pour linker la lib:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o libOutil.so fic1.o fic2.o ... -L/usr/X11R6/lib -lXm -lXt -lX11 -shared
    Pour créer l'exécutable j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gcc -c essai.c -g -fPIC -std=c89 -ansi -Dxxx
    gcc -o essai essai.o -g -fPIC -std=c89 -ansi -Dxxx  -L/usr/X11R6/lib -lXm -lXt -lX11 -lOutil
    En réponse j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    libOutils.so: undefined reference to 'UxDisplay'
    libOutils.so: undefined reference to 'UxScreen'
    libOutils.so: undefined reference to 'assert'
    libOutils.so: undefined reference to ''c_VG_revision'
    ...
    - c_VG_revision est déféni dans un fichier .h inclue dans 2 fichiers .c de la lib
    - les autres sont définies dans des .h de X11R6

    Voilà, est-ce que quelqu'un peut m'aider ? (si ce n'est pas conpréhensible dite-le).
    Cordialement,
    Jula.
    Promis, avant j'ai cherché sur Google!

  2. #2
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    re-
    Je me répond toute seule, enfin presque : c'est un collègue de bureau qui vient de m'aider pour vous dire la vérité
    Le fait est que dans certains fichiers .h que certains .c incluent, il y a des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    extern CivaXstruct CivaXglob;
    #define CivaDisplay CivaXglob.display
    ...
    Du coup, à l'édition de lien de la lib pas de pb, mais quand je crée mon exe certaines variables globales ne sont pas instanciées!
    Il faut donc que j'ajoute dans mon .c contenant le main tout un tas de def, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "fic_contenant_le_code_o_dessus.h"
    ...
    CivaXstruct CivaXglob;
    ...
    int main ...
    et voilà, le tour est joué !
    Encore du code fort peu sympathique à porter/faire évoluer hein?
    M'enfin, merci à ceux qui ont pris la peine de lire mon post et de chercher dans leur coin.
    Cordialement,
    Jula.
    Promis, avant j'ai cherché sur Google!

  3. #3
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    et zut,
    j'ai déclarer effectivement des variables mais il me reste un soucis:
    dans la lib, deux fihiers .c incluent le fichier CivaErreur.h qui contient entre autre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define CIVA_INFO\
        {\
          [i]....code...[/i]
         }\
        Civa_InfoErr
    et moi j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    libOutils.so: undefined reference to 'Civa_InfoErr'
    alors je dois faire comment là?
    jula.
    Promis, avant j'ai cherché sur Google!

  4. #4
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    bon,
    je compile "en aveugle" parce qu'en fait la lib que je veux utiliser repose sur d'autres lib...
    c'est à l'édition de lien entre toutes ces lib que toutes les symboles sont référencés correctement...
    et quand je crée mon exécutable, c'est à ce moment que ce qui n'est pas vraiment référencé ressort.
    du coup, je ne vois pas d'erreurs à la compil pour certaines choses, comme la fonction "strrstr" qui n'existe pas!
    mais au link de mon exécutable, il n'y a pas de ref dessusr...
    bref, je dois chercher dans le code ou apparaissent ces trucs non référencés, comprendre pourquoi et voir comment y remédier (pour strrstr, je refais la fonction) !
    c'est génial, j''en ai pour 6 mois sur cette mission, jsuis vraiment mal tombée!
    m'enfin, ça arrive à tout le monde de tomber sur un truc pas cool, c'est pour mieux apprécier quand on tombe sur un truc bien, hein?
    jula.
    Promis, avant j'ai cherché sur Google!

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 15/04/2009, 09h14
  2. Créer une bibliothèque à partir d'un site ASP.NET
    Par Benzeghiba dans le forum SharePoint
    Réponses: 7
    Dernier message: 17/09/2008, 20h42
  3. [VBA-E] comment créer une bibliothèque de classes ?
    Par james-mi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/05/2006, 21h04
  4. créer une bibliothèque
    Par progima dans le forum MFC
    Réponses: 1
    Dernier message: 24/10/2005, 15h39

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