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 :

Dépendances, compilations et liaisons


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Dépendances, compilations et liaisons
    Bonjour à tous,

    J'ai un exécutable EXE qui utilise une bibliothèque statique LIB1, et LIB1 utilise une bibliothèque statique LIB2.

    A la compilation de EXE, je dois lier avec LIB1 et LIB2 sinon j'ai des erreurs de lien comme quoi il y a des symboles non référencées.

    Ce que j'aimerai est que LIB1 embarque les symboles utilisés de LIB2 (sachant que EXE n'utilise rien de LIB2).

    Est-ce possible ?

    Dans mon makefile j'ai du g++ -c file.cpp (-c qui indique uniquement compilation) pour donner le file.o et ensuite c'est du "ar rcs file1.o file2.o ..."

    Merci à vous,

    A bientôt

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Tu veux donc fusionner les 2 bibliothèques en une seule.
    Le linker doit avoir certainement cette possibilité.
    une commande du genre ar -rcT libFusion.a libLib1.a libLib2.a devrait fonctionner

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Merci beaucoup, je testerai ça demain ou vendredi

    Merci encore

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Bonjour,

    J'ai mal dû faire quelque chose.

    Ici mon makefile avant modification :

    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
     
    CC=aarch64-linux-android-g++ -std=c++11 -pedantic -fnothrow-opt -fPIC -Wl,-no-keep-memory -DZMQ_STATIC
    CFLAGS=-I.. -Ofast -s
    LDFLAGS=
    LIB=Core
    DEST=../bin/
    SRC= $(shell find ./ -type f -name '*.cpp')
    OBJ= $(SRC:.cpp=.o) 
     
    all : $(LIB)
     
    Core : $(OBJ)
    	aarch64-linux-android-ar rcs $(DEST)$(LIB).a $^ $(LDFLAGS)
     
    $(OBJ): %.o: %.cpp
    	@$(CC) -o $@ -c -fpic $< $(CFLAGS)
     
    .PHONY: clean mrproper
     
    clean:
    	find . -name '*.o' -exec rm \-fv {} \;
     
    mrproper: clean
    	rm -rf $(LIB).a
    Ça produit bien mon Core.lib qui se link bien mais ça produit des erreurs car ça utilie Lib2.a et les symboles ne sont pas inclus.

    Donc j'ai rajouté le "ar rcT" pour faire une "SuperLib" :

    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
     
    CC=aarch64-linux-android-g++ -std=c++11 -pedantic -fnothrow-opt -fPIC -Wl,-no-keep-memory -DZMQ_STATIC
    CFLAGS=-I.. -Ofast -s
    LDFLAGS=
    LIB=Core
    DEST=../bin/
    SRC= $(shell find ./ -type f -name '*.cpp')
    OBJ= $(SRC:.cpp=.o) 
     
    all : $(LIB) SuperLib
     
    Core : $(OBJ)
    	aarch64-linux-android-ar rcs $(DEST)$(LIB)_tmp.a $^ $(LDFLAGS)
     
    SuperLib : 
    	aarch64-linux-android-ar rcT $(DEST)SuperLib.a $(DEST)$(LIB).a $(DEST)Lib2.a
     
    $(OBJ): %.o: %.cpp
    	@$(CC) -o $@ -c -fpic $< $(CFLAGS)
     
    .PHONY: clean mrproper
     
    clean:
    	find . -name '*.o' -exec rm \-fv {} \;
     
    mrproper: clean
    	rm -rf $(LIB).a
    Ça produit bien mon SuperLib.a mais lorsque j'essaye de le lier avec un exécutable j'ai une erreur :
    SuperLib.a: error adding symbols: Malformed archive
    Error:error: ld returned 1 exit status
    Auriez-vous des pistes ?

    Merci,

    A bientôt

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    J'ai continué à jouer avec ar, et si je retire le T pour faire du "rc" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aarch64-linux-android-ar rc $(DEST)SuperLib.a $(DEST)$(LIB).a $(DEST)Lib2.a
    ça indique
    SuperLib.a: error adding symbols: Archive has no index; run ranlib to add one
    Ce qui est logique puisque je n'ai pas spécifié le "s" pour créer un index. Mais le problème maintenant c'est que je peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aarch64-linux-android-ar rcs $(DEST)SuperLib.a $(DEST)$(LIB).a $(DEST)Lib2.a
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aarch64-linux-android-ar -s ../bin/SuperLib.a
    Et ça ne change rien :'(

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  2. [Compilation] Inversion de dépendances
    Par cookieParis dans le forum C++
    Réponses: 3
    Dernier message: 18/05/2007, 15h46
  3. [VB6]Compilation sans dépendance
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/08/2006, 03h22

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