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 :

Compilation bibliothèque dynamique sous Linux avec un Makefile


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut Compilation bibliothèque dynamique sous Linux avec un Makefile
    Bonjour à tous,
    je viens de faire un petit programme qui contient 3 fichiers .c et 3 fichiers .h. J'ai rédigé aussi le Makefile pour générer l'"exécutable" sous linux.
    Makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    prog: toto1.o toto2.o toto3.o
    	gcc -o prog toto1.o toto2.o toto3.o -lcrypto
    toto1.o: toto1.c
    	gcc -o toto1.o -c toto1.c
    toto2.o: toto2.c
    	gcc -o toto2.o -c toto2.c
    toto3.o: toto3.c
    	gcc -o toto3.o -c toto3.c
    clean:
    	rm *.o
    mrproper: clean
    	rm prog
    Donc l'exécution se passe correctement.
    Maintenant, j'aimerai, avec ce même Makefile, faire de ce programme, une bibliothèque dynamique. Mais après avoir essayé plusieurs choses, rien ne fonctionne.
    Est-il aussi possible de générer le .so mais aussi de garder l'exécutable ?

    Autre question, une fois que j'aurai la bibliothèque, comment je fais pour déclarer une fonction en entrée pour ma librairie ?

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    J'ai ajouter la ligne suivante dans mon Makefile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o libprog.so -shared toto1.o toto2.o toto3.o
    Et j'ai bien eu un fichier libprog.so qui a était crée.

    Est-ce une bonne méthode ?

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Oui mais il me semble qu'il faille ajouter -shared qui indique que la bibliothèque est dynamique.
    Extrait du man de gcc :
    -shared
    Produit un objet partagé qui peut être lié avec d'autres objets pour former un exécutable. Seul un petit nombre de systèmes supportent cette option.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    heu, gerald3d, je l'ai ajouté le -shared
    Tu es fatigué, il est l'heure d'aller se coucher

    Merci qu'en même pour ta réponse.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par SuperSeb95 Voir le message
    Autre question, une fois que j'aurai la librairie, comment je fais pour déclarer une fonction en entrée pour ma librairie ?
    Si tu veux dire une fonction style DllMain sous Windows, qui est appelée toute seule au chargement de la librairie, alors il faut utiliser
    __attribute__ ((constructor))
    et
    __attribute__ ((destructor))
    je te laisse googler pour quelques exemples.

    Si par contre tu veux juste déclarer des fonctions appelables depuis l'extérieur, il me semble que par défaut toute fonction est visible depuis l'extérieur.
    Tu peux utiliser la commande nm pour en être sûr.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par SuperSeb95 Voir le message
    heu, gerald3d, je l'ai ajouté le -shared
    Tu es fatigué, il est l'heure d'aller se coucher

    Merci qu'en même pour ta réponse.
    Au temps pour moi. Il y a des jours où je ferais mieux d'aller à la pêche

Discussions similaires

  1. Compiler Qt 5 sous Linux avec une autre version de GCC
    Par uriotcea dans le forum Débuter
    Réponses: 2
    Dernier message: 15/04/2014, 09h39
  2. Réponses: 3
    Dernier message: 18/06/2008, 17h27
  3. Pb de compilation sous linux avec geany 0.12
    Par dnode57 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 05/12/2007, 18h37
  4. [Kylix] Problème sous Linux avec Delphi
    Par DECROIX Emmanuel dans le forum EDI
    Réponses: 2
    Dernier message: 15/03/2005, 15h00
  5. [Kylix] Compiler FMA
    Par dodik dans le forum EDI
    Réponses: 1
    Dernier message: 17/01/2005, 10h51

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