#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
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):
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
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
Hors ligne