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 :

Variable extern avec librairie C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut Variable extern avec librairie C
    Bonjour,

    Voilà, je ne suis pas réellement un débutant mais j'ai quand même un problème. Je n'ai jamais utilisé de variable extern en C.

    Donc voilà ce que je fais :

    Dans le .c de ma future librairie (et oui c'est pour redéfinir la fonction malloc pour faire traitement dessus), je déclare

    Ensuite je la compile en .so etc...

    Apres dans l'autre je fais :

    (hors du main, en global)

    Et ca me dit à chaque fois

    /tmp/cci9yJ4D.o: In function `main':
    main.c: (.text+0x46): undefined reference to `fichier'
    collect2: ld a retourné 1 code d'état d'exécution


    Donc, j'aimerais savoir ce qui ne va pas.
    Merci d'avance !!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 469
    Par défaut
    Bonjour,

    Citation Envoyé par razonback Voir le message
    Dans le .c de ma future librairie (et oui c'est pour redéfinir la fonction malloc pour faire traitement dessus), je déclare

    Ensuite je la compile en .so etc...

    Apres dans l'autre je fais :

    (hors du main, en global)
    Je suppose que c'est le cas, mais ta variable fichier doit être globale du côté de ta bibliothèque également.

    Et ca me dit à chaque fois

    /tmp/cci9yJ4D.o: In function `main':
    main.c: (.text+0x46): undefined reference to `fichier'
    collect2: ld a retourné 1 code d'état d'exécution


    Donc, j'aimerais savoir ce qui ne va pas.
    Merci d'avance !!
    Cela signifie que tu compiles du code qui fait référence à un symbole défini en dehors, d'accord, mais qu'au moment de bâtir l'exécutable final, le symbole en question n'a toujours pas été trouvé.

    Quand tu es dans cette situation, soit tu utilises l'option « -c » pour créer un fichier objet « *.o » qui ne sera pas directement exécutable mais qui pourra être inclus au sein d'un projet plus grand, soit tu crées directement un exécutable et, dans ce cas, il faut le lier à la bibliothèque ou au fichier objet dont il dépend.

    Si c'est une bibliothèque partagée, il faut le lier avec l'option « -l » comme tu le fais avec les bibliothèques habituelles du système.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Ici un petit tutoriel sur les généralités de la programmation en C.
    Comme le dit Obsidian, tout ce qui te manque c'est de lier au final ton module objet avec la librairie
    cc -c ton_source.c
    cc ton_source.o ta_librairie.a -o ton_executable
    ou bien (dans le cas d'une librairie dynamique)
    cc -c ton_source.c
    cc ton_source.o ta_librairie.so -o ton_executable

    Ensuite tu pourras te plonger dans les joies du Makefile qui te permettront de maintenir et faire évoluer les liens de compilation de ton objet => un Makefile bien fait et d'un simple appel à make, tous les éléments modifiés de ton projets (et seulement eux) seront recompilés et liés
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    Merci ça marche maintenant !!

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

Discussions similaires

  1. Requête SQL avec variable externe
    Par Kesle dans le forum Bases de données
    Réponses: 15
    Dernier message: 15/05/2009, 18h14
  2. application externe avec des parametre variable
    Par CoOki_ dans le forum Excel
    Réponses: 3
    Dernier message: 11/08/2007, 09h07
  3. probleme jar avec librairie externe
    Par pitbul44 dans le forum JBuilder
    Réponses: 2
    Dernier message: 07/01/2007, 12h09
  4. Compilation avec librairie externe
    Par sniper91 dans le forum NetBeans
    Réponses: 5
    Dernier message: 02/08/2006, 11h24

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