Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/07/2010, à 07:49

CasseTaTele

[résolu] Makefile: undefined reference

Bonjour,

qu'est-ce qui cloche dans mon Makefile?

all: mp3tag

mp3tag: main.o album.o
	g++ main.o album.o -ltag

main.o: main.cpp
	g++ main.cpp -W -Wall -ansi -ltag

album.o: album.cpp album.h
	g++ -c album.cpp

mon main.cpp

#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm> // pour transform
#include <fstream>
#include <vector>

#include "album.h"
#include </usr/local/include/taglib/fileref.h>
#include </usr/local/include/taglib/tag.h>

using namespace std;



int main(int argc, char *argv[])
{

	Album_p *test =new Album_p();
	test->afficher();	

  return 0;
}

album.h

#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm> // pour transform
#include <fstream>
#include <vector>

using namespace std;

// Déclaration de la classe A
class Album_p{

public:
  
  string name;


  Album_p();
  Album_p(string na);

  void afficher();
  

};

album.cpp

#include "album.h"

void Album_p::afficher()
{
	cout << "Album name: " << name << endl;
}

Album_p::Album_p()
{
}

Album_p::Album_p(string na)
{
	name=na;
}

j'ai l'erreur suivante:

sebastien@sebastien-desktop:~/code/mp3tag$ make
g++ main.cpp -W -Wall -ansi -ltag
main.cpp:18: warning: unused parameter ‘argc’
main.cpp:18: warning: unused parameter ‘argv’
/tmp/ccwUuZrl.o: In function `main':
main.cpp:(.text+0x20): undefined reference to `Album_p::Album_p()'
main.cpp:(.text+0x30): undefined reference to `Album_p::afficher()'
collect2: ld returned 1 exit status
make: *** [main.o] Erreur 1

Dernière modification par CasseTaTele (Le 27/07/2010, à 19:41)

Hors ligne

#2 Le 27/07/2010, à 09:21

grim7reaper

Re : [résolu] Makefile: undefined reference

Salut,

Déjà change

#include </usr/local/include/taglib/fileref.h>
#include </usr/local/include/taglib/tag.h>

par

#include <taglib/fileref.h>
#include <taglib/tag.h>

dans le fichier main.cpp

Il ne faut pas mettre les chemins absolu (chez moi, ça ne fonctionnait pas car les headers de taglib sont dans /usr/include et non pas dans /usr/local/include), laisse le compilo se débrouiller.

Ensuite, pour ton problème de Makefile, il te suffit de remplacer

g++ main.cpp -W -Wall -ansi -ltag

par

g++ -c main.cpp -W -Wall -ansi

afin d'effectuer uniquement la compilation (et pas l'édition des liens avec).

Dernière modification par grim7reaper (Le 27/07/2010, à 09:22)

Hors ligne

#3 Le 27/07/2010, à 09:59

CasseTaTele

Re : [résolu] Makefile: undefined reference

merci! j'essaye ça dès que je rentre chez moi smile

Si j'ai mis les chemins absolu c'est parce que dans la doc (ici), dans la rubrique Installing TagLib, c'est écrit que ça marche pas sans ça (ou alors j'ai mal compris):

Taglib doc a écrit :

Note that TagLib's include install directory must be included in the header include path. Simply adding <taglib/tag.h> will not work.

mais j'essaierai sans, je suis d'accord que c'est bizarre avec les chemins absolu...

Dernière modification par CasseTaTele (Le 27/07/2010, à 09:59)

Hors ligne

#4 Le 27/07/2010, à 19:41

CasseTaTele

Re : [résolu] Makefile: undefined reference

ça marche merci !

Hors ligne

#5 Le 27/07/2010, à 22:45

Link31

Re : [résolu] Makefile: undefined reference

Note that TagLib's include install directory must be included in the header include path. Simply adding <taglib/tag.h> will not work.

Ça veut dire que tu dois inclure le dossier d'installation de taglib avec l'option "-I dossier/" de GCC. Si tu as installé taglib depuis les dépôts ou avec "make install", ce n'est pas nécessaire. Ça ne change rien au fait qu'on ne doit pas mettre de chemins absolus dans les inclusions.

À part ça, mettre un "using namespace std" dans un fichier header représente le mal absolu, enlève-moi ça tout de suite tongue

Hors ligne