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

Autres éditeurs Discussion :

"Undefined reference"s, alors que le linker est normalement configuré !


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut "Undefined reference"s, alors que le linker est normalement configuré !
    Bonjour,

    Je suis en train de coder une bibliothèque audio basée sur FmodEx. A environ les 3/4 de la fin de la biblio, j'ai décidé de la tester avec un programme test.

    Bref, création de projet, inclusion du header de la biblio, un peu de code, et puis édition des liens en rajoutant bien le chemin du .a obtenu à la compilation de la biblio, et 'fmodex' (normal).

    Et c'est au build que j'obtiens un fratras d'erreurs d' "undefined reference", dont le log est le suivant :
    Code x : 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
    obj\Release\main.o:main.cpp:(.text+0x68):: undefined reference to `SAM::Init()'
    obj\Release\main.o:main.cpp:(.text+0x431):: undefined reference to `SAM::Close()'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x6a3):: undefined reference to `SAM::g_sys'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x6cd):: undefined reference to `SAM::g_sys'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x6d5):: undefined reference to `_ZN4FMOD6System4initEijPv@16'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x6ed):: undefined reference to `SAM::g_sys'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x6f5):: undefined reference to `_ZN4FMOD6System7releaseEv@4'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x715):: undefined reference to `_ZN4FMOD5Sound7releaseEv@4'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x735):: undefined reference to `_ZN4FMOD5Sound7releaseEv@4'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x780):: undefined reference to `SAM::g_sys'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x788):: undefined reference to `_ZN4FMOD6System12createStreamEPKcjP22FMOD_CREATESOUNDEXINFOPPNS_5SoundE@20'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x7b5):: undefined reference to `_ZN4FMOD7Channel9isPlayingEPb@8'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x7eb):: undefined reference to `_ZN4FMOD7Channel9getPausedEPb@8'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x886):: undefined reference to `SAM::g_sys'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x88e):: undefined reference to `_ZN4FMOD6System9playSoundE17FMOD_CHANNELINDEXPNS_5SoundEbPPNS_7ChannelE@20'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x8fd):: undefined reference to `_ZN4FMOD7Channel4stopEv@4'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x985):: undefined reference to `_ZN4FMOD7Channel9setPausedEb@8'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0x9cc):: undefined reference to `_ZN4FMOD5Sound9getLengthEPjj@12'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0xa49):: undefined reference to `_ZN4FMOD7Channel11setPositionEjj@12'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0xa8a):: undefined reference to `_ZN4FMOD7Channel11getPositionEPjj@12'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0xb19):: undefined reference to `_ZN4FMOD5Sound6getTagEPKciP8FMOD_TAG@16'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0xb5a):: undefined reference to `_ZN4FMOD5Sound6getTagEPKciP8FMOD_TAG@16'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0xbf9):: undefined reference to `_ZN4FMOD7Channel9setVolumeEf@8'
    C:\Data\Work\PlayTyle\SAM\libSAM.a(SAM.o):SAM.cpp:(.text+0xc21):: undefined reference to `_ZN4FMOD7Channel9getVolumeEPf@8'
    :: === Build finished: 24 errors, 0 warnings ===
    Je suis sûr que c'est tout bête, mais pas moyen de trouver... pourriez-vous m'aider ?

    Merci d'avance.

    P.S: Je suis sous Code::Blocks, et donc le compilo Mingw32.

    N.B. : Aucun rapport, mais je me demandais... est-ce que c'est possible de programmer le RCX des Lego Mindstorms ? (je n'ai pas de kit graveuse-insoleuse pour les circuits imprimés, donc en attendant ça peut être intéressant)

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Partiellement résolu en pv (problème de namespace (résolu) + incompatibilité de la DLL fmod (dont les fonctions C++ sont décorées à la visual) (non-résolu)).
    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 éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Oui, grâce à toi c'est en partie résolu. Mais après avoir jeté un coup d'oeil sur le forum de Fmod, Fmodex n'est compatible qu'avec les compilos MS (quelle débilité). Résultat, je me vois dans l'obligation de me mettre à Visual Studio (VC++), et après l'avoir installé et 10min d'utilisation j'en suis déjà dégoûté. Rien que pour faire ma bibliothèque, c'est le foutoir ! (passez moi l'expression)

    Bref, me restent en tête ces questions :
    -> Est-ce qu'après avoir compilé ma biblio avec VS, je pourrais retourner sous C::B pour continuer mon projet (utilisant cette biblio) ? Si oui, comment puis-je faire ?
    -> Y aurait-t-il un genre de "tuto" sur l'utilisation de VS ? Je pense que savoir le manier pourrait me profiter, étant donné le nombre de foncitonnalités...
    -> Aucun rapport, mais mon programme sera créé en C++. Serait-il intéressant d'apprendre MFC pour l'incorporer ?

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    • Pas avec une interface en C++ : Les noms mutilés à la C++ (name mangling) sont spécifiques au compilateurs, contrairement aux noms décorés à la C (name decoration) qui sont standardisés sous Windows.
      En C, oui.
      Ou sinon, tu fais de ta DLL un composant COM (en C++ de base sans assistants, c'est PITA mais plus ou moins faisable; Avec un projet ATL, il faut connaître et moi je ne connais pas : Mon seul essai s'est soldé par un échec) et tu pourras l'utiliser depuis tous les compilos qui supportent la structure de données des interfaces COM (MinGW semble supporter), puisque l'interface de la DLL est en C.
    • Pour les fonctions de base, ça a l'air assez intuitif quand même (du moins, si tu as l'aide). Sinon, j'ignore s'il existe des tutos.
    • Non, MFC n'est pas vraiment approprié pour ce que tu fais pour ton interface graphique. C'est possible, mais je pense que tu te compliquerais la vie...
    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 éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Merci pour tes réponses.

    Je sens que je suis parti pour utiliser Fmod en C seulement. (Visual, je comprends rien... déjà rien qu'à la création d'un simple projet, ATL, CLR et compagnie je ne vois pas ce que c'est... pour compiler une biblio standard en C++, c'est par où ? ) J'espère que les fonctions d'Fmodex ne seront pas retirées, au moins...

    C'est quand même une honte qu'ils nous imposent un compilateur !

    P.S: Tiens au fait, les attributs de classe ref, interface et autres, c'est vraiment du C++ standard ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Ah, mince, j'avais oublié VS Express.
    En effet, VS Express est anti-intuitif pour créer un projet C++ natif : Les modèles de projets "Win32 application", "Win32 console application" etc. en sont absents.
    Mais comme je ne l'ai pas, je ne peux pas te donner la bonne procédure.

    PS: Non, c'est du C++/CLI, c'est pour .Net.
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/07/2010, 16h52
  2. Réponses: 7
    Dernier message: 30/12/2006, 17h13
  3. Apache m'affiche les "Notice" alors que je l'est d
    Par mr_neness dans le forum Apache
    Réponses: 4
    Dernier message: 14/03/2006, 11h47
  4. [9i]erreur de type alors que le type est le meme...
    Par hoaxpunk dans le forum Oracle
    Réponses: 12
    Dernier message: 01/02/2006, 17h45

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