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 :

chargement d'une librairie dynamique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut chargement d'une librairie dynamique
    Bonjour,

    Je suis novice en C et j'ai quelques soucis avec une librairie dynamique que j'ai créé.

    J'ai fait deux petit programme. Le premier utilisant des fonctions de l'autre (l'équivalant d'un iterator).
    Les test de ce programme fonctionne quand je les utilise directement (en dehors d'un appel à ces fonctions via une librairie).

    Par contre si je genere une librairie dynamique et que je l'utise j'ai un plantage (Segmentation fault) des que j'arrive à l'appel de mon autre fonction (mon iterator).

    J'ai compilé les programmes avec entre autre les options -fPIC, la librairie avec -shared -fPIC et enfin le programme de test avec -ldl.

    Je suis completement dépacer, l'erreur ne genere pas de fichier de core et l'execution avec strace donne au plantage :
    -- SIGSEV (Segmentation fault) @ 0 (0) ---
    +++ killed by SUGSEGV +++

    Si quelqu'un à une idée, suggestion ou autre je suis preneur !

    Louis

    PS : c'est du C ansi sous linux, le gcc est du 3.3.3

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    salut,

    euuuhhh je vois pas comment t'aider la :S

    sois plus précis -> donne du code, ....

    merci

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par ltournayre
    Si quelqu'un à une idée, suggestion ou autre je suis preneur !
    Ajoute l'option -g à la compilation et ensuite utilie gdb, tu pourras, entre autre, obtenir le contexte lors de l'erreur

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    Merci de la sugestion, c'est déjà fait (en faite -ggdb) mais cela ne produit pas de fichier de core, mais ta proposition ma fait verifier une chose :
    Controler si j'avais le droit de généré un gros fichier (entre autre de core)

    >ulimit -c unlimited
    ....

    et maintenant j'ai mon fichier.

    Je regarde cela et si je reste perdu (ce qui est quasiment certain) je poste la fin du core (en lisible ).

    Louis

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    J'ai mon contexte d'erreur mais cela ne m'avance pas, je croyais au debut qu'il y avait un probleme de chargement de la fonction mais ce n'est pas le cas car mon plantage se produit bien dans la fonction appeler.

    Sinon je veux bien mettre le code mais j'ai peur que cela soit un peu illisible pour 2 raisons :
    - je suis novice en C donc mon code est du meme niveau
    - il s'agit de classe de tests appelant d'autres librairies spécifiques, donc le code n'est pas testable.
    Je vais quand même mettre le code en PJ mais je vais refaire une classe simplifié qui va reproduire cela (sans l'appel aux autres librairies et avec moins d'instructions). Je la posterai quand je l'aurai fait.

    Louis

  6. #6
    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 ltournayre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -- SIGSEV (Segmentation fault) @ 0 (0) ---
    Tu déréférences un pointeur NULL... Caÿ mal.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu déréférences un pointeur NULL... Caÿ mal.
    Je te crois mais question de novice : cela veut dire quoi ? que je fais un truc du genre free(NULL) ?

    Et surtout pourquoi ce meme code tester sans passer par une librairie dynamique (inclusion des .h dans un programme de test) ne plante pas ?

    Louis

  8. #8
    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 ltournayre
    Je te crois mais question de novice :
    Novice ? Et tu écris un Share Object ? Y'a un bug...
    cela veut dire quoi ? que je fais un truc du genre free(NULL) ?
    free (NULL), ça va, c'est défini par le langage C, et ça ne fait rien.

    Par contre beaucoup d'autres fonctions ont un comportement indéfini avec NULL. Pareil si un pointeur vaut NULL et qu'il est déréférencé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Et surtout pourquoi ce meme code tester sans passer par une librairie dynamique (inclusion des .h dans un programme de test) ne plante pas ?
    Parce qu'il y a un bug dans ton code. Un test ne révèle pas tous, notamment les comportements indéfinis.

    Sans voir ton code, on ne peut rien dire. Poste une version réduite qui montre le défaut.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Novice ? Et tu écris un Share Object ? Y'a un bug...
    C'est trop aimable mais il y a bien un bug je suis novice en C.

    Citation Envoyé par Emmanuel Delahaye
    Parce qu'il y a un bug dans ton code. Un test ne révèle pas tous, notamment les comportements indéfinis.
    Au vu de mon programme cela semble malheureusement que trop vrai.

    Citation Envoyé par Emmanuel Delahaye
    Sans voir ton code, on ne peut rien dire. Poste une version réduite qui montre le défaut.
    Je suis en train de la faire.


    Merci de tes réponses mais sans rire cela veut dire quoi : "Tu déréférences un pointeur NULL" ?


    Louis

  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 ltournayre
    Merci de tes réponses mais sans rire cela veut dire quoi : "Tu déréférences un pointeur NULL" ?
    Si tu ne sais pas ce qu'est un pointeur, ni le vocabulaire y afférent, tu ne peux pas programmer C et encore moins écrire de SO.

    C'est pour ça que je dis qu'il y a un bug. Tu fais des choses que tu ne sais pas faire. C'est grave, mais ça peut se corriger :

    Ouvre un livre de C et apprend le C.

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

Discussions similaires

  1. Extraire les objets d'une librairie dynamique
    Par Lapk_gre dans le forum C
    Réponses: 13
    Dernier message: 29/07/2008, 14h49
  2. Linker une librairie dynamique
    Par Mathieu.J dans le forum Linux
    Réponses: 2
    Dernier message: 29/10/2005, 19h18
  3. Recompiler une librairie dynamique (DLL) en statique
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 07/04/2005, 19h28
  4. Compiler et créer une librairie dynamique en C
    Par fidififouille dans le forum Linux
    Réponses: 3
    Dernier message: 30/11/2004, 16h36
  5. création d'une librairie dynamique
    Par bilo2000 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/08/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