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

Systèmes de compilation Discussion :

[Unix] Makefile d'une librairie ?


Sujet :

Systèmes de compilation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Coordinateur Qualité
    Inscrit en
    Avril 2002
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinateur Qualité
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 62
    Par défaut [Unix] Makefile d'une librairie ?
    Bonjour à tous,

    question qui va paraître très simpliste aux chevronnés mais personnellement, je galère depuis plus d'une heure pour trouver ce que je veux sur le web.

    J'aimerais trouver un exemple de makefile pour créer une librairie (.so et/ou .a) sous Unix en C.

    C'est une librairie toute simple: j'ai juste un seul fichier log.c (pas de .h).

    Quelqu'un pourrait-il soit me fournir un exemple, soit m'aiguiller vers un site qui en contiendrait ?

    Merci à qui pourra m'aider,
    Vonotar

  2. #2
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Salut, ca ca devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CC = gcc
    LINKFLAGS = -O3 -lm
    AR = ar
    ARFLAGS = rcs
    LIB = liblog.a
    LINK = $(CC) $(LINKFLAGS) -o $@
     
     
    MAIN_OBJECTS = log.o
     
    all : $(LIB) 
     
    $(LIB) : $(MAIN_OBJECTS) Makefile
    	$(AR) $(ARFLAGS) $(LIB) $(MAIN_OBJECTS)
    Rq: je n'ai pas mis les dependances pour la generation du .o (ca devrait etre automatique si le make est correct...).

  3. #3
    Invité de passage
    Inscrit en
    Novembre 2002
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1
    Par défaut
    Bonjour,

    je veux faire quasiment la même chose que Vonotar mais je ne comprends pas ces 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(LIB) : $(MAIN_OBJECTS) Makefile
       $(AR) $(ARFLAGS) $(LIB) $(MAIN_OBJECTS)
    Voila ce que j'ai fait jusqu'à présent:
    - Mon objectif est de créer un programme qui appelle une lib .so.
    Comme je débute dans les makefile et que je n'ai jamais fait appel à une lib .so à partir d'un programme C
    - J'ai commencé par suivre la FAQ sur les makefile pour créer un exécutable hello, jusque là tout va bien j'ai à peu près compris comment
    faire. J'ai donc créé un main.c et un hello.c que voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void Hello(void)
    {
            printf("Hello World\n");
    }
    - J'ai ensuite créé un fichier .exp contenant la fonction que je veux appeler
    - Maintenant j'essaie de modifier le makefile pour créer la lib hello.so
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    PATH=/home/rlau/tests
    MAKEFILE=${PATH}/makefile
    MAKE=/usr/bin/make
    CC=/usr/bin/gcc
    AR=ar
    ARFLAGS=rcs
    EXEC=hello
     
    all: hello.so
     
    hello.so: hello.o 
            ${MAKE} -f ${MAKE}
     
    hello: hello.o
            $(CC) -o ${TEST0PATH}/hello hello.o
     
    hello.o: hello.c
            $(CC) -o ${PATH}/hello.o -c ${PATH}/hello.c
     
    clean:
            rm -rf ${PATH}/*.o
     
    mrproper: clean
            rm -rf ${PATH}/$(EXEC)
    - Mon deuxième problème est comment appeler un .so à partir d'un fichier test.c . Est-ce au moment de la compilation que l'on insère des options de compilation particulières?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(void)
    {
            Hello();
            return 0;
    }
    ça fait pas mal de questions,
    merci,
    laurent

  4. #4
    Membre confirmé
    Homme Profil pro
    Coordinateur Qualité
    Inscrit en
    Avril 2002
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinateur Qualité
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 62
    Par défaut
    Citation Envoyé par D[r
    eadLock]Salut, ca ca devrait marcher :
    Salut,

    En fait, j'ai honteusement refilé la tâche de créer un Makefile à un collègue.

    Mais je te remercie de m'avoir répondu et m'excuse pour le dérangement.

    Amicalement,
    Vonotar


    ps: sorry rlau, je ne peux malheureusement pas t'aider...

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2014, 11h13
  2. Création d'un makefile avec une librairie externe
    Par sisi_06 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/05/2014, 17h09
  3. Définir une librairie comme SAS USER ou Word (UNIX)
    Par boussata dans le forum SAS Base
    Réponses: 2
    Dernier message: 27/01/2009, 11h01
  4. Makefile: linker une librairie ?
    Par tintin72 dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 24/02/2008, 13h47
  5. Makefile & compilation d'une librairie
    Par domiq44 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 13/09/2007, 10h38

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