Je suis en train de mettre en place un projet C++, sur Ubuntu x64, en utilisant Eclipse-CDT. Je fais essentiellement un "hello world" et un lien vers une bibliothèque commerciale tierce.
J'ai inclus les fichiers d'en-tête, lié à leurs bibliothèques, mais j'obtiens toujours des erreurs de liaison. Y a-t-il d'autres problèmes possibles que ceux qui sont évidents (par exemple, je suis sûr à 99 % que je me lie à la bonne bibliothèque) ?
- Existe-t-il un moyen de confirmer que les bibliothèques statiques que je lie sont 64 bits ?
- Existe-t-il un moyen de confirmer que la bibliothèque possède la classe (et les méthodes) que j'attends d'elle ?
dit Eclipse :
Building target: LinkProblem
Invoking: GCC C++ Linker
g++ -L/home/notroot/workspace/somelib-3/somelib/target/bin -o"LinkProblem" ./src/LinkProblem.o -lsomelib1 -lpthread -lsomelib2 -lsomelib3
./src/LinkProblem.o: In function \`main':
/home/notroot/workspace/LinkProblem/Debug/../src/LinkProblem.cpp:17: undefined reference to \`SomeClass::close()'
./src/LinkProblem.o: In function \`SomeOtherClass':
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148: undefined reference to \`SomeClass::SomeClass()'
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148: undefined reference to \`vtable for SomeOtherClass'
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:151: undefined reference to \`SomeClass::~SomeClass()'
./src/LinkProblem.o: In function \`~SomeOtherClass':
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140: undefined reference to \`vtable for SomeOtherClass'
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140: undefined reference to \`SomeClass::~SomeClass()'
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140: undefined reference to \`SomeClass::~SomeClass()'
collect2: ld returned 1 exit status
make: \*\*\* \[LinkProblem\] Error 1
0 votes
La bibliothèque du tiers est-elle 64 bits ?
0 votes
Oui, il est en 64 bits. Mais vous pourriez être sur quelque chose. Comment puis-je m'assurer que mon code/projet est en 64 bits ? Dans Visual Studio, j'ai créé une configuration de construction x64.
1 votes
Existe-t-il un moyen de confirmer que la bibliothèque tierce est en 64 bits ? Par exemple, inspecter les fichiers .a avec un outil ou autre ?
0 votes
Où se trouve-t-elle ? Une recherche sur Google montre qu'il y a une semi-convention qui le place dans le répertoire /usr/lib64.
0 votes
Les fichiers lib tiers sont ici : /home/notroot/workspace/somelib-3/somelib/target/bin
0 votes
Merci, j'ai essayé de les commander à nouveau, sans succès.
0 votes
Avez-vous essayé de chercher sur Google les termes "3rd party" et "64 bit" ?
0 votes
@Daniel : pas beaucoup dans google sur eux. J'ai leurs échantillons, ils se construisent bien. Je peux également créer des liens vers leurs bibliothèques sous Windows sans problème (x64). Je les contacte pour obtenir de l'aide, mais cela prend du temps. Probablement une partie de ma difficulté ici est d'être nouveau à gcc/linux.
0 votes
Si vos bibliothèques ont des dépendances circulaires, vous devrez peut-être utiliser ce mécanisme : stackoverflow.com/questions/45135/linker-order-gcc/