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 :

Linkage biblioth�que "undefined reference"


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2014
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Par d�faut Linkage biblioth�que "undefined reference"
    Bonjour,

    J'ai cr�er une biblioth�que libMath.a avec Code::Blocks comportant un fichier main.cpp et une fonction:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    #include "header.h"
     
    int add(int i, int j)
    {
       return i + j;
    }
    J'ai compiler le projet, j'obtient donc mon libMath.a.

    (J'ai aussi le header.h avec le prototype)

    J'ai ensuite cr�er une autre projet C++ pour utiliser la libraires:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <iostream>
    #include "header.h"
     
    int main()
    {
       int i = add(5, 6);
       return 0;
    }
    Dans les option de compilation j'ai bien rajouter la biblioth�que pour le linkage, mais voila, lorsque je compile le projet:

    "undefined reference to `add(int, int)' "

    En cr�ant le m�me projet mais cette fois en C, je n'ai plus ce probl�me, je ne comprend pas.

    Encore autre chose, si je cr�er manuellement la biblioth�que avec "ar cr libMath.a main.o", la biblioth�que cr��e fonctionne avec mon projet c++.

    (Je ne peux donc pas utiliser la librairie twitcurl.lib, pour la m�me erreur )

    Quelqu'un aurait-il une id�e ??

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut

    Quelle est la ligne de commande d'�dition de liens?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2014
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Par d�faut
    La ligne de commande pour la cr�ation de la biblioth�que avec code::blocks:
    "g++.exe -Wall -g -std=c++14 -c C:\Workspace\test2\mathLib\main.cpp -o obj\Debug\main.o
    cmd /c if exist bin\Debug\libmathLib.a del bin\Debug\libmathLib.a
    ar.exe -r -s bin\Debug\libmathLib.a obj\Debug\main.o
    ar.exe: creating bin\Debug\libmathLib.a
    Output file is bin\Debug\libmathLib.a with size 1.72 KB

    "

    et la ligne de commande pour mon programme utilisant la biblioth�que:
    "i686-w64-mingw32-g++.exe -o bin\Debug\testLibCpp.exe obj\Debug\main.o C:\Workspace\test2\mathLib\bin\Debug\libmathLib.a"

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Essaie en rempla�ant C:\Workspace\test2\mathLib\bin\Debug\libmathLib.a par -L C:\Workspace\test2\mathLib\bin\Debug -lmathLib.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2014
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Par d�faut
    Probl�me finalement r�solu !
    En fait, lors de la cr�ation du projet de biblioth�que statique sous code::blocks, gcc est utilis� pour faire le main.o, ensuite le main.o est dans la inclus dans la biblio et donc apparemment �a ne fonctionne pas dans un projet en c++ ("undefined reference"). J'ai du faire le main.o avec g++ et ensuite include ce main.o dans la biblioth�que. Si quelqu'un � des explication � cela je suis preneur

  6. #6
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2014
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Par d�faut
    Merci pour la r�ponse M�dinoc, j'avais en effet d�j� essayer mais �a n'avait malheureusement pas fonctionner.

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ah, probl�me de d�coration de noms.

    Il convient de syst�matiquement exporter des noms C pour des fonctions qui sont purement C-style:
    Code C/C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*Header.h*/
     
    #ifndef EXTERN_C
    #ifdef __cplusplus
    //Indique au compilo C++ d'exporter sous forme de nom C plutôt qu'avec un nom C++
    #define EXTERN_C extern "C"
    #else
    /*Ne fait rien de particulier*/
    #define EXTERN_C extern
    #endif
    #endif
     
    EXTERN_C int add(int i, int j);
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    //MathLib.cpp
    #include "header.h"
     
    EXTERN_C int add(int i, int j)
    {
       return i + j;
    }
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Main.cpp
    #include <iostream>
    #include "header.h"
     
    int main()
    {
       int i = add(5, 6);
       return 0;
    }
    Plus d'infos
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 31/10/2011, 19h26
  2. R�ponses: 13
    Dernier message: 26/11/2010, 14h14
  3. Probl�me de linkage mingw32 undefined reference
    Par nek_kro_kvlt dans le forum Autres �diteurs
    R�ponses: 1
    Dernier message: 05/06/2007, 13h46

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