Ce simple bout de code me donne vraiment du fil à retordre, alors quelqu'un pourrait-il avoir la gentillesse de m'expliquer ce qui ne va pas ? J'ai un simple fichier cpp qui utilise une classe incluse dans le fichier d'en-tête.
lib.h
namespace tnamespace {
class base{
virtual ~base() {};
};
class test/*: public base*/ {
public:
test();
test();
};
}
lib.cxx
#include "lib.h"
namespace tnamespace{
test::test() {};
test::~test() {}
}
start.cpp
#include <iostream>
#include <lib.h>
int main() {
tnamespace::test d;
return 0;
}
J'utilise gcc version 4.1.2 20080704 et je compile le projet avec
g++ start.cpp -I./ext_lib -Wall
J'ai obtenu l'erreur de liaison suivante
/tmp/ccK2v6GD.o : Dans la fonction `main' :
start.cpp :(.text+0x7a) : référence indéfinie à `tnamespace::test::test()'.
start.cpp :(.text+0x88) : référence indéfinie à `tnamespace::test::~test()'.
collect2 : ld a retourné le statut de sortie 1
J'ai réussi à trouver une solution. J'ai oublié de compiler ma librairie. Commande g++ correcte
g++ start.cpp ext_lib/lib.cxx -I./ext_lib -Wall