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

GCC Discussion :

linkage partiel de fichiers objet


Sujet :

GCC

  1. #1
    Membre régulier
    Profil pro
    Ingénieur consultant
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur consultant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Points : 88
    Points
    88
    Par défaut linkage partiel de fichiers objet
    Bonjour,

    Je cherche comment linker (avec gcc) seulement certain symbole (fonction) dans un fichier objet.

    Je m'explique d'un côté, j'ai une première paire de fichiers (objet + header):

    file1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void f1();
    void f2();
    file1.o contenant le code compilé des functions.

    De l'autre je crée un autre fichier objet contenant une autre version compilée de f1():

    file2.o

    Enfin, j'ai un fichier

    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "file1.h"
     
    main()
    {
    	f1();
    	f2();
    }
    Je voudrais pouvoir compiler mon programme avec f1 issue de file2.o et f2 issue de file1.o

    une ligne de commande du genre:

    gcc main.c file2.o file1.o<ne prend que f2>

    Je précise bien je n'ai pas le code source de file1.o

    Si quelqu'un est expert dans les commandes gcc ou ld.

  2. #2
    Membre régulier
    Profil pro
    Ingénieur consultant
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur consultant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Points : 88
    Points
    88
    Par défaut
    Comme j'ai trouvé la réponse à ma question, je poste si ça intéresse du monde.

    Une solution se trouve grâce à l'utilitaire objcopy fournit avec les binutils.

    La commande nm permet de connaître les symboles contenus dans un fichier objet, on a donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # nm file1.o
    00000000 T f1
    0000000a T f2
    ainsi que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # nm file2.o
    00000000 T f1
    On va donc se créer un fichier file1_bis.o ne contenant plus le symbole f1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objcopy --strip-symbol=f1  file1.o file1_bis.o
    On obtient alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # nm file1_bis.o
    0000000a T f2
    Il ne reste plus qu'à linker le tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc main.c file2.o file1_bis.o
    Et voilà.

    objcopy à plein d'autres options sympa, bon je ne vous fais pas la copie du RTFM (man objcopy...)

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

Discussions similaires

  1. Erreur de compilation de fichier objet avec gtk
    Par oranoutan dans le forum GTK+
    Réponses: 2
    Dernier message: 14/09/2007, 15h22
  2. [j3D] integrer un fichier objet
    Par vero55 dans le forum 3D
    Réponses: 2
    Dernier message: 19/04/2007, 13h28
  3. Ouvrir partiellement un fichier texte
    Par wjc dans le forum Windows XP
    Réponses: 4
    Dernier message: 21/09/2006, 22h42
  4. Réponses: 3
    Dernier message: 07/07/2006, 18h00
  5. [HTML] Télécharger partiellement un fichier
    Par MiJack dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 07/10/2005, 09h55

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