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 :

bibiothéque statique .a sous linux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Doctorant
    Inscrit en
    Février 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 258
    Par défaut bibiothéque statique .a sous linux
    Bonjour;

    j'ai compilé, j'ai un fichier .a , je ne sais pas comment faire le lien avec le code parce-que le code ne reconnait pas les fonctions

    Merci.

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Bonjour

    Comme avec un .o

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Bonjour

    Comme avec un .o
    Ce n'est pas une très bonne idée. Ça marche, mais ce n'est pas comme ça qu'il faut faire.

    Reprenons depuis le début, en supposant que tu utilises la ligne de commande.

    Lorsqu'on compile un programme composé de .o, on liste simplement les fichiers qu'on souhaite lier sur la ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o targetprog file1.o file2.o file3.o
    On peut étendre ça et rajouter la librairie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o targetprog file1.o file2.o file3.o libfile.a
    Ce n'est pas la bonne manière de procéder.

    Le compilateur propose une option spécifique pour lier un programme à une librairie : l'option -l (petit L). Cette option permet de s'abstraire d'un certain nombre de choses, y compris l'extension de la librairie (.a ou .so). L'argument passé à l'option -l est le nom de la librairie sans l'extension et sans le préfixe "lib".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o targetprog file1.o file2.o file3.o -l file
    Ce n'est peut-être pas suffisant : avec cette ligne de commande, le linker va chercher la librairie dans /lib et dans /usr/lib - la librairie peut très bien être autre part. Fort heureusement, il existe une autre option -L qui permet de spécifier un chemin de recherche supplémentaire pour toutes les librairies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o targetprog -L chemin/contenant/ma/lib  file1.o file2.o file3.o -l file
    Et hop ! Magie !

    A noter que si le .so et le .a sont trouvé par le linker, il va préférer utiliser le .so. Pour forcer l'utilisation du .a, il faudra utiliser l'option -static

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -static -o targetprog -L chemin/contenant/ma/lib  file1.o file2.o file3.o -l file
    (remplacer gcc par g++ pour lier du C++)

    Parce que je suis magnanime (hum...), et parce que j'ai envie d'écrire du Makefile, voici un exemple de Makefile qui est assez réutilisable : tu n'as qu'à modifier le nom de la cible, la liste des fichiers source et la liste des librairies pour créer un programme.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    # Makefile presque intelligent, mais pas trop quand même
     
    ################## A MODIFIER ####################
    # Le nom du programme
    MYPROGRAM = myprog
     
    # la liste des fichiers sources (ici : tous les fichiers .c du répertoire)
    MYSOURCES = $(wildcards *.c)
     
    # la liste des librairies - sans le "lib", et sans l'extension (.a ou .so)
    MYLIBS = 
     
    # la liste des répertoires 
    MYLIBDIRS = 
     
    # = yes si on compile en C++, no sinon
    CPLUSPLUS = yes
     
    # = yes pour force un link static, no sinon
    FORCESTATIC = no
     
    ################## NE PAS MODIFIER ####################
     
    OBJS = $(MYSOURCES:%.c=%.o)
    LIBS += $(foreach f,$(MYLIBS), -l $(f))
    LDFLAGS += $(foreach d,$(MYLIBDIRS), -L $(d))
     
    ifeq ($(strip $(CPLUSPLUS)),yes)
      COMPILER = $(CXX)
      LINKER = $(CXX)
      COMPILERFLAGS = $(CXXFLAGS)
    else
      COMPILER = $(CC)
      LINKER = $(CC)
      COMPILERFLAGS = $(CFLAGS)
    endif
     
    ifeq ($(strip $(FORCESTATIC)),yes)
      LDFLAGS += -static
    endif
     
    all: $(MYPROGRAM)
     
    $(MYPROGRAM): $(OBJS)
    	$(LINKER) -o $(LDFLAGS) $@ $< $(LIBS)
     
    clean:
    	rm -f $(OBJS)
    	rm -f $(MYPROGRAM)
     
    %.o: %.c
    	$(COMPILER) -o $@ $(COMPILERFLAGS) -c $^
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  2. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 10h46
  3. installer jbuilder7 sous linux
    Par rtlinfo34 dans le forum JBuilder
    Réponses: 5
    Dernier message: 30/10/2002, 19h16
  4. Réponses: 2
    Dernier message: 25/10/2002, 22h19
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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