GCC C++ Linker erreur: Undefined reference to 'vtable for XXX', Undefined reference to 'ClassName::ClassName()'

Je suis la mise en place d'un projet C++, sur Ubuntu x64, à l'aide d'Eclipse-CDT. Je suis fondamentalement de faire un hello world et en les reliant à un commerical 3ème partie de la bibliothèque.

J'ai inclus les fichiers d'en-tête, lié à leurs bibliothèques, mais je reçois encore des erreurs d'édition de liens. Y at-il des problèmes possibles, à l'exception de l'évidentes (par exemple, je suis à 99% sûr que je suis un lien vers la bibliothèque correcte).

  1. Est-il un moyen de confirmer les bibliothèques statiques, je suis un lien vers sont 64bit?
  2. Est-il un moyen de confirmer que la bibliothèque a la classe (et les méthodes), je m'attends à avoir?

Eclipse dit:

De construction cible: LinkProblem 
Invocation: GCC C++ Linker 
g++ -L/home/notroot/espace de travail/somelib-3/somelib/cible/bin -o"LinkProblem" ./src/LinkProblem.o -lsomelib1 -lpthread -lsomelib2 -lsomelib3 
./src/LinkProblem.o: In function `main': 
/home/notroot/espace de travail/LinkProblem/Debug/../src/LinkProblem.rpc:17: undefined reference to `SomeClass::close()' 
./src/LinkProblem.o: Dans la fonction "SomeOtherClass': 
/home/notroot/espace de travail/somelib-3/somelib/include/sql/somefile.h:148: undefined reference to `SomeClass::SomeClass()' 
/home/notroot/espace de travail/somelib-3/somelib/include/sql/somefile.h:148: undefined reference to `vtable pour SomeOtherClass' 
/home/notroot/espace de travail/somelib-3/somelib/include/sql/somefile.h:151: undefined reference to `SomeClass::~SomeClass()' 
./src/LinkProblem.o: In function `~SomeOtherClass': 
/home/notroot/espace de travail/somelib-3/somelib/include/sql/somefile.h:140: undefined reference to `vtable pour SomeOtherClass' 
/home/notroot/espace de travail/somelib-3/somelib/include/sql/somefile.h:140: undefined reference to `SomeClass::~SomeClass()' 
/home/notroot/espace de travail/somelib-3/somelib/include/sql/somefile.h:140: undefined reference to `SomeClass::~SomeClass()' 
collect2: ld a retourné 1 code de sortie 
make: *** [LinkProblem] Erreur 1 
  • Est la 3ème partie de la bibliothèque de 64 bits?
  • Oui, c'est 64 bits. Vous pourriez être sur de quelque chose de bien. Comment puis-je m'assurer que mon code est 64bit? Dans Visual Studio, j'ai créé une version x64 de config.
  • Est-il un moyen de confirmer la 3ème partie de la bibliothèque est en 64 bits? E. g. inspecter l' .un fichiers avec un outil ou quelque chose?
  • Où est-il situé? Google montre qu'il existe un semi-convention de l'avoir dans le répertoire /usr/lib64
  • La troisième partie fichiers lib êtes ici: /home/notroot/espace de travail/somelib-3/somelib/cible/bin
  • merci, j'ai essayé de re-commander, pas de chance encore.
  • Avez-vous essayé de googler pour la 3ème partie et 64 bits?
  • pas beaucoup dans google sur eux. J'ai leurs échantillons, ils construisent amende. Je peux également faire le lien avec leurs bibliothèques sur Windows très bien (x64). Je suis en contact avec eux pour les soutenir, tout en prenant peu de temps. Probablement certains de mes difficulté ici est nouveau pour gcc/linux.
  • Si vos bibliothèques ont des dépendances circulaires, vous devrez peut-être utiliser ce mécanisme: stackoverflow.com/questions/45135/linker-order-gcc/...

InformationsquelleAutor Alex Black | 2009-07-07