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 :

edition de lien mixte


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 160
    Points : 49
    Points
    49
    Par défaut edition de lien mixte
    Salut tlm
    j'ai un problème d'édition de lien sous Linux
    j ai un objet compilé (test.o) avec gcc qui offre une fonction f() écrite en C . je veux utiliser cette fonction dans C++.
    j'ai fais un petit test qui me renvoies une erreur


    [adel@laptotAdel ml]$ gcc -c test.c
    [adel@laptotAdel ml]$ g++ -c main.cpp
    In file included from /usr/lib/gcc/i386-redhat-linux/4.0.2/../../../../include/c++/4.0.2/backward/iostream.h:31,
    from main.cpp:1:
    /usr/lib/gcc/i386-redhat-linux/4.0.2/../../../../include/c++/4.0.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
    [adel@laptotAdel ml]$ g++ main.o test.o
    main.o(.text+0x1d): In function `main':
    main.cpp: undefined reference to `f()'
    collect2: ld a retourné 1 code d'état d'exécution


    et voici le code
    [adel@laptotAdel ml]$ cat test.c
    int f(){
    return 0;
    }
    [adel@laptotAdel ml]$ cat main.cpp
    #include <iostream.h>
    main(){
    int f();
    cout << f() << endl;
    return 0;
    }

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Vu le code, c'est normal.
    <iostream.h> est déprécié, on utilise <iostream> en C++
    ensuite, essaie g++ test.o main.o, qu'il puisse voir la fonction f avant son appel.

  3. #3
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    J'ai eu pas mal de pbs avec l'édition des liens entre un programme C, et un main en C++. Le truc c'est que le compilateur C va "changer les noms de fonction" en remplaçant une fonction Toto par Toto16 par exemple... Alors qu'en C++, les noms sont identiques.
    Du coup, l'édition des liens ne se fait pas.
    Tu l'as déclaré comme extern "C"?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par poukill
    J'ai eu pas mal de pbs avec l'édition des liens entre un programme C, et un main en C++. Le truc c'est que le compilateur C va "changer les noms de fonction" en remplaçant une fonction Toto par Toto16 par exemple... Alors qu'en C++, les noms sont identiques.
    Du coup, l'édition des liens ne se fait pas.
    Tu l'as déclaré comme extern "C"?
    C'est le contraire. les noms en C++ sont décorés, pas en C.

  5. #5
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    C'est le contraire. les noms en C++ sont décorés, pas en C.
    Oups...
    Le principe était là quand même...

Discussions similaires

  1. Edition des liens croisée
    Par Matthieu Brucher dans le forum Windows
    Réponses: 3
    Dernier message: 22/03/2006, 00h08
  2. Réponses: 11
    Dernier message: 20/01/2006, 12h35
  3. Edition de liens dynamique sous linux
    Par Ipoupaille dans le forum Linux
    Réponses: 4
    Dernier message: 09/01/2006, 21h53
  4. Edition de liens et librairie dynamique
    Par nicolas.pied dans le forum C++
    Réponses: 9
    Dernier message: 14/11/2005, 14h29
  5. Rôle de l'édition de lien?
    Par sali dans le forum C
    Réponses: 6
    Dernier message: 14/05/2005, 21h17

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