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 :

Compilation gcc -shared -c *.c Puis archivage ?


Sujet :

Autres éditeurs

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Compilation gcc -shared -c *.c Puis archivage ?
    Bonjour à tous, je travaille en ce moment sur une application en C comprenant 2 bibliothèques, Mère et Fille. J'ai du mal à comprendre comment les compilations et les éditions de liens sont faites, pouvez-vous m'aider ?

    On compile la Mère en dynamique : le but est d'obtenir Mère.so. Lors de l'édition de liens de Mère, on inclut Fille en statique, donc Fille.a (une archive).

    J'étais donc parti pour compiler les sources de la Fille avec (grosso modo)
    > gcc -c fille*.c -o fille*.o
    > ar rv Fille.a fille*.o

    Puis inclure Fille.a lors de l'édition de liens de la Mère :
    > ld -shared mere*.o Fille.a -o Mere.so

    Ce à quoi on m'a rétorqué : "Non non, c'est une compilation dynamique, donc on 'archive' bien les fille*.o 'dans' Fille.a, mais la compilation des sources se fait avec le flag -shared :
    > gcc -shared -c fille*.c -o fille*.o
    > ar rv Fille.a fille*.o (cette commande ne change pas)
    "

    Moi j'ai du mal à comprendre le truc... je pensais qu'on produisait une archive pour "faire" du statique, et un shared object pour "faire" du dynamique, mais mes notions ne sont pas très claires. Ensuite, il faut lors de l'éxecution mettre l'emplacement des .so dans le LD_LIBRARY_PATH, alors que c'est inutile pour l'archive.

    Or là je vois que dans mon projet, on utilise l'archive "hybride" (qui contient des objets compilés en -shared) comme une archive "classique", rien de la Fille n'est inclus dans le LD_LIBRARY_PATH, on n'y trouve que le chemin vers Mere.so.

    Quelqu'un pourra t-il m'éclairer ? Merci.

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Je suis assez sceptique sur la différence.
    -shared est une option de linking, gcc -c fait de la compilation.
    gcc -c truc.c -shared et gcc -c truc.c produisent exactement la même chose.
    Donc a mon avis, il a dit des choses fausses.

    Mais je ne vois pas bien l'interet de créer une librairie statique juste pour l'inclure dans une librairie dynamique..

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par zul
    gcc -c truc.c -shared et gcc -c truc.c produisent exactement la même chose.
    Ben le fait est qu'entre ces 2 compilations, on a réellement une erreur à l'execution pour la première, et que la seconde passe sans problème.

    Erreur qui est peut-être due à autre chose, je suis en train de me noyer dans ce projet...

    J'ai fait des recherches sur le net, sur google groups, mais je ne trouve rien qui corresponde à mon problème. Lorsqu'on parle de gcc -shared, c'est effectivement toujours pour parler de l'édition de liens, pas de la compilation "simple" des sources.

    Pour le fait d'avoir 2 librairies, c'est parce que la Fille est une librairie qui existe depuis longtemps, qui a servi dans de nombreux projets, qui a son propre environnement de compilation (makefiles toussa), on n'a jamais eu de problèmes avec... jusqu'à aujourd'hui, où on veut l'intégrer dans un environnement 64 bits.

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Personelement j'aurais fais comme toi, je vois pas à quoi ça sert d'ajouter -shared à la compilation, je me demande aussi si c'est pas n'importe quoi...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Finalement, le flag -shared est ignoré par gcc lorsqu'on fait une édition de lien. Il était présent dans les scripts écripts par mon collaborateur pour des raisons de compatibilité, mais il n'a tout simplement aucune incidence sur l'execution du programme.

    Mon problème vient d'ailleurs et je suis en train de plancher dessus... merci néanmoins pour vos réponses.

Discussions similaires

  1. Compilation gcc avec upnp
    Par YuGiOhJCJ dans le forum C
    Réponses: 6
    Dernier message: 25/05/2010, 13h42
  2. erreur compilation gcc
    Par Adren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 06/11/2006, 13h55
  3. [debutant] compilation gcc et makefile
    Par harsh dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 08/06/2006, 19h30
  4. Erreur compilation GCC
    Par KnightsOfTheRound dans le forum GCC
    Réponses: 8
    Dernier message: 07/11/2005, 16h28
  5. Option de compilation gcc : sem.h
    Par Luther13 dans le forum Linux
    Réponses: 8
    Dernier message: 29/12/2004, 13h29

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