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 :

Lien avec une librairie statique


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut Lien avec une librairie statique
    Bonjour,

    Je suis sous Linux. Ayant une erreur à l'exécution de mon programme pour trouver les librairies lorsque je link en dynamique, j'essaie de contourner le problème en faisant le link en statique.
    Le début de mon makefile est celui-ci (généré automatiquement, je ne fais que modifier la ligne LDFLAGS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CC = gcc -g
     
    CFLAGS = -Iinclude  -gstabs -I/home/...
    LDFLAGS = -static -L/usr/lib -lm -L/home/...
     
    OBJ = obj
    SRC = src
     
    etc.
    Lorsque je fais un make, j'ai perdu toutes les fonctions de maths (et probablement d autres, mais la compil s'arrête) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    obj/toto1.o(.text+0x683): In function `fct1':
    src/toto1.c:944: undefined reference to `sqrt'
    obj/toto1.o(.text+0xa45): In function `fct2':
    src/toto1:1176: undefined reference to `atan2'
    obj/toto1.o(.text+0xa54):src/toto1.c:1176: undefined reference to `sin'
    J ai vérifié que les fichiers libm.a et libm.so (nécessaire ?) sont bien dans /usr/lib.
    Je ne vois pas où est le problème, alors si quelqu'un à une idée ?
    Merci

  2. #2
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Est ce que je peut voire tous le fichier Makefile ?

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Voilà en pièce jointe :
    Fichiers attachés Fichiers attachés

  4. #4
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Bon le Makefile est correcte, j'ai pas trouvé une faute !!!

    Est ce que tu as essayé sans spécifié l'emplacement de la bib math, parce que normalement elle doit être connu par le système LINUX ????

    Et quand exactement l'erreur apparaisse ?

  5. #5
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Hey attend, dans le Makefile, il y a des chose comme CrossTools,, est ce que vous utilisé le même compilateur gcc du système ???

    Si vous utilisé une chaine de compilation pour la cross compilation, il y aura une confusion au niveau de lien, même si vous specifié la biblio.

    Tous simplement parce que les deux binaire n'ont pas la même structure interne .........

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    au départ effectivement, il n y avait pas l emplacement de la bib math :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LDFLAGS = -static -lm -L/home/Soft/Gcc/Linux/3.3.2/lib -lg2c -L/home/CrossTools/simucom/V2.6_beta_2/Linux/i686 -L/home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib -L/home/CrossTools/LibTIM/V2.1.0-beta3/BINARIES/Linux/RH7.2/i686 -L/home/SIMU_ASPIC/ASPIC_TRAVAIL/ASPIC/ASPIC_V11.2_RHEL4/Linux/2.6.19-rt12/i686/libc-2.3.4/gcc3.4.3/Debug/lib -L/home/CrossTools/LibSIGEXT/V1.6_bouchon/ -L/home/CrossTools/LibNET/V1.0/Linux/i686 -L/home/CrossTools/LibSYNCHRO/V1.3/Linux/i686 -lDSC_Trace -lDiSCo -DINVERT_LITTLEBIG
    mais ça faisait l erreur, donc je l ai ajouté.

    Sinon, l erreur apparait apres avoir fait tous les .o de tous les fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -g -Iinclude  -gstabs -I/home/CrossTools/simucom/V2.6_beta_2/Linux/i686 -I/home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/inc -I/home/CrossTools/LibTIM/V2.1.0-beta3/BINARIES/Linux/RH7.2/i686 -I/home/SIMU_ASPIC/ASPIC_TRAVAIL/ASPIC/ASPIC_V11.2_RHEL4/Linux/2.6.19-rt12/i686/libc-2.3.4/gcc3.4.3/Debug/lib -I/home/CrossTools/LibSIGEXT/V1.6_bouchon/ -I/home/CrossTools/LibNET/V1.0/Linux/i686 -I/home/CrossTools/LibSYNCHRO/V1.3/Linux/i686 -DINVERT_LITTLEBIG -D_LINUX  -c src/vector.c -o obj/vector.o
    J ai ce bloc pour tous les fichiers et après, j ai l erreur.

    Sinon, je ne comprends pas, désolée :
    est ce que vous utilisé le même compilateur gcc du système ???

    Si vous utilisé une chaine de compilation pour la cross compilation, il y aura une confusion au niveau de lien, même si vous specifié la biblio.

  7. #7
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    ahhhhhhhhh, bon est ce tu peut essayer de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(BIN) : $(OBJECTS)
    	$(CC) $(OBJECTS) $(LDFLAGS) -o $(BIN)

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    euh...

    Les biblothèques à lier doivent être appelées dans l'ordre de profondeur....

    donc en général -lm doit être en dernier...

    APRES toutes les autres, définissant les packages..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -L /path1 -libPackageTop  -L /path2 -libPackageIntermediaire -L /path3 -libPackageBottom -L  /pathlibc -lm -lc

  9. #9
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Re,

    Voilà, j ai essayé, je n'ai plus les erreurs sur la lib de maths, par contre, maintenant, j ai des pages et des pages d'erreurs sur la "libDiSCo.a", voilà le début :

    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
     
    /home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib/libDiSCo.a(DSC_Tools.o)(.text+0x2a5): In function `DSC_Tools::get_local_addresses(int&)':
    : Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    obj/gestion_icd.o(.text+0x10): In function `Arret_1':
    src/gestion_icd.c:353: undefined reference to `ncis_modele_release'
    obj/gestion_icd.o(.text+0x173): In function `InitialiseICD':
    src/gestion_icd.c:412: undefined reference to `ncis_modele_init_type_eqpt'
    obj/gestion_icd.o(.text+0xca0): In function `GestionEtatICD':
    src/gestion_icd.c:936: undefined reference to `ncis_modele_receive_data'
    obj/gestion_icd.o(.text+0x66f3): In function `SendDataToVisual':
    src/gestion_icd.c:3607: undefined reference to `ncis_modele_send_data'
    obj/gestion_icd.o(.text+0x6707):src/gestion_icd.c:3608: undefined reference to `ncis_modele_send_synchro'
    /home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib/libDiSCo.a(DSC_BasicAPI.o)(.text+0x8b): In function `__static_initialization_and_destruction_0(int, int)':
    : undefined reference to `std::ios_base::Init::~Init()'
    /home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib/libDiSCo.a(DSC_BasicAPI.o)(.text+0x1c7): In function `__static_initialization_and_destruction_0(int, int)':
    : undefined reference to `std::ios_base::Init::Init()'
    /home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib/libDiSCo.a(DSC_BasicAPI.o)(.text+0x226): In function `__T3_E_DSC_API()':
    : undefined reference to `T3_Entity::T3_Entity(char const*)'
    /home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib/libDiSCo.a(DSC_BasicAPI.o)(.text+0x28c): In function `__T3_T_DSC_API___INIT()':
    : undefined reference to `T3_Theme::T3_Theme(T3_Entity const&, char const*)'
    /home/CrossTools/DiSCo/Ref/DiSCo_4.7/install/Linux-2.4.7-10/Release/lib/libDiSCo.a(DSC_BasicAPI.o)(.text+0x2be): In function `__T3_T_DSC_API___INIT()':
    Je crois qu il dit au début ce qui ne va pas, mais je ne sais pas ce qu il faudrait ajouter...

    Merci !

  10. #10
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Ah j avais pas vu le dernier message

    J ai essayé en mettant -lm en dernier (juste avant -DINVERT_LITTLEBIG) mais j ai la même erreur (sin, cos...)

Discussions similaires

  1. Problème avec une librairie statique
    Par flo_k dans le forum C
    Réponses: 2
    Dernier message: 21/09/2009, 21h50
  2. Comment lier une application avec une librairie statique ?
    Par michel_bbm dans le forum Visual C++
    Réponses: 7
    Dernier message: 08/04/2008, 14h49
  3. Problème de lien avec une bibliothèque statique
    Par streetpc dans le forum C++/CLI
    Réponses: 2
    Dernier message: 28/10/2006, 17h38
  4. [java] établir un lien avec une application java
    Par pmartin8 dans le forum Access
    Réponses: 2
    Dernier message: 19/10/2005, 14h36
  5. [RCP] pb d'export du produit avec une librairie
    Par nuandafr dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/08/2005, 12h08

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