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 :

Insertion de <string.h>


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut Insertion de <string.h>
    Bonsoir,

    J ai besoin d appeler les fonctions de la bibliotheques <string.h>, genre strlen, strcat...

    Mais au moment de l execution à l aide de ./a.out je recois le message d erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     ./a.out: relocation error: ./a.out; symbol strlen, version o.6 not 
    defined in file libc.so.6 with link time reference


    Ps: je suis sous linux et je compile avec gcc.

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut

    C'est bien space dis donc

    Normalement, la librairie standard est linkée, les fonctions ne sont pas appelées dans une bibliotheque dynamique

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    Franchement je comprends pas, sachant que ce n est pas la 1ere fois que j utiliste la biliotheque <string.h>.

    J'ai essayé à la fac et chez moi, toujours la meme erreur.

    Avec la bibliotheque dynamique libc.so...

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    UN FICHIER D'ENTETES N'EST PAS UNE BIBLIOTHEQUE !!!!!!

    Ce n'est pas la première fois (et certainement pas la dernière) que je vois ça sur ce forum.
    Mais d'où vient cette c........ ?
    Rassurez-moi, ce n'est quand même pas vos profs qui vous dises des âneries pareils !!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    Citation Envoyé par crocodilex
    UN FICHIER D'ENTETES N'EST PAS UNE BIBLIOTHEQUE !!!!!!

    Ce n'est pas la première fois (et certainement pas la dernière) que je vois ça sur ce forum.
    Mais d'où vient cette c........ ?
    Rassurez-moi, ce n'est quand même pas vos profs qui vous dises des âneries pareils !!!
    non rassurez vous ce n'est pas eux !!

    mais j arrive toujours pas à trouver une solution...

  6. #6
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Donne nous un exemple de commande pour génerer ton executable (et éventuellement un bout de code compilable).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    Citation Envoyé par crocodilex
    Donne nous un exemple de commande pour génerer ton executable (et éventuellement un bout de code compilable).
    Pour simplifier voici les FICHIERS D ENTETES
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<assert.h>
    et la partie qui fait appel à strlen, sachant que mon code est beaucoup plus compliqué mais le principe est le meme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char* mot;
    mot="bonjou";
    int k=strlen(mot);
    char c='r';
    mot[k]=c;
    mot[k+1]='\0';
    en gros c est ca, en fait je veut concatener ma lettre c à mon mot, j avais essayé la fonction strcat mais ca m a donné le meme message d erreur.

    merci pour votre patience !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    et pour compiler : gcc fichier.c

  9. #9
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Mouais.....Bizarre tout ça.....
    As-tu fais une mise à jour de la GLIBC recemment ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    non, du tout le pire que c'est le meme message d erreur que ca soit chez moi ou à la fac..

  11. #11
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Tu as installé gcc comment?

  12. #12
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Je crois que je vais donner ma langue au chat....
    Je pressentais une incompatibilité entre la version de la GLIBC et la version de ton Kernel, mais si tu me dis que le résultat est identique à la fac, alors là, je sèche.

    Et sinon ça donne quoi avec un programme très simple du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(void)
    {
        printf ("Hello world\n");
        return 0;
    }

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    je travaille avec y a pas mal de temps et ca été installé lors de l installation de linux, et à la fac ce n est pas moi qui l'ai fait

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    Citation Envoyé par crocodilex
    Je crois que je vais donner ma langue au chat....
    Je pressentais une incompatibilité entre la version de la GLIBC et la version de ton Kernel, mais si tu me dis que le résultat est identique à la fac, alors là, je sèche.

    Et sinon ça donne quoi avec un programme très simple du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(void)
    {
        printf ("Hello world\n");
        return 0;
    }
    ben toutes mes autres fonctions marchent tres bien, sauf celle dans lesquelles je fais appel à une des fonctions de <string.h>

  15. #15
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    As tu des warnings ou des erreurs lors de l'édition de lien ?

    Compiles ton fichier avec l'option -Wall,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall fichier.c -o fichier
    et dis nous si tu as des messages d'erreurs.

  16. #16
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Rien a voir avec ton problème, mais juste pour dire que ton code est buggé.
    Si tu veux concatener deux chaines, ce n'est pas comme ça qu'il faut s'y prendre.
    Citation Envoyé par felicity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char* mot;
    mot="bonjou";
    int k=strlen(mot);
    char c='r';
     mot[k]=c;
     mot[k+1]='\0';

  17. #17
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bien vu
    Si ça se trouve c'est lié ^^
    (Depassement mémoire qui fait pointer des chaines ailleurs que là où elles devraient pointer => message d'erreur qu'a rien à voir)

  18. #18
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Gruik
    Bien vu
    Si ça se trouve c'est lié ^^
    (Depassement mémoire qui fait pointer des chaines ailleurs que là où elles devraient pointer => message d'erreur qu'a rien à voir)
    Non, je pense que ça n'a rien a voir avec son problème. Le bug cité ci-dessus se traduit généralement par une "segmentation fault" sur linux.

  19. #19
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Pas forcément

  20. #20
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    En principe, avec ce type de déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* mot;
    mot="bonjou";
    mot pointe vers une zone mémoire non modifiable, d'où la plante au moment de la concaténation.
    De même, mais pour une autre raison si on fait
    Le compilo réserve juste la place pour écrire "bonjou", soit 6+1 caractères et avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mot[k]=c;
     mot[k+1]='\0';
    on sortira de la zone valide avec toutes les conséquences imaginables, en particulier la plus perfide, ça fonctionne pendant les essais et ça plante le jour de la démo devant le prof
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. Insertion d'une String dans un XML
    Par cyclopsnet dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 22/05/2011, 04h23
  2. [ADO + D7] PBM insert strings - espaces superflus !?
    Par fredfred dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/06/2006, 11h40
  3. Réponses: 2
    Dernier message: 12/05/2006, 23h01
  4. Réponses: 9
    Dernier message: 20/04/2006, 11h07
  5. Réponses: 6
    Dernier message: 07/04/2006, 18h23

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