У меня есть проект C ++, который ссылается на файлы .h и .cpp из библиотеки (ACE_TAO). (http://www.theaceorb.com/)
Я включил пути к библиотекам проекта GCC C ++ и GCC C ++ Linker.
Однако, когда я пытаюсь построить свой проект, я получаю сообщение об ошибке.
undefined reference to ACE_Message_Block::~ACE_Message_Block()
| line 627 external location /home/user/Documents/ACE_wrappers/ace/CDR_Stream.inl
undefined reference to CORBA::ORB~ORB();
| line 45 external location /home/user/Documents/ACE_wrappers/Tao/tao/ORB.inl
Вот мой собственный файл заголовка проекта
#ifndef MESSENGERSERVER_H_
#define MESSENGERSERVER_H_
#include <tao/ORB.h> // this is causing the error
class MessengerServer {
public:
MessengerServer();
virtual ~MessengerServer();
private:
CORBA::ORB_var orb; // this is causing the error
1) Я включил правильный заголовочный файл, и eclipse может разрешить заголовочный файл, так что это должно означать, что мои пути к библиотекам верны, верно?
2) Если мои пути к библиотекам верны, почему Eclipse не может ссылаться на файлы .cpp для реализации двух методов? мой файл .h и .cpp находятся в одной папке.
3) Я подумал, что это может быть из-за того, что у меня нет файлов .o в путях к библиотекам, поэтому я запустил «make» и сгенерировал файлы .o в том же каталоге, но все равно получаю ту же ошибку.
Я что-то упускаю / неправильно понимаю? Заранее спасибо.
Обновить:
Вот команда Eclipse C ++, используемая для сборки моего проекта
g++ -I/home/user/Documents/ACE_wrappers/TAO/
-I/home/user/Documents/ACE_wrappers/ace/
-I/home/user/Documents/ACE_wrappers/
-O0- g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"myMain.d" -MT"myMain.d" -o"myMain.o" "../myMain.cpp"Finished Building:../MyMain.cpp
g++ -I/home/user/Documents/ACE_wrappers/TAO/
-I/home/user/Documents/ACE_wrappers/ace/
-I/home/user/Documents/ACE_wrappers/
-O0- g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"MyServer.d" -MT"MyServer.d" -o"MyServer.o" "../MyServer.cpp"Finished Building:../MyServer.cpp
g++ -L/home/user/Documents/ACE_wrappers/TAO/
-L/home/user/Documents/ACE_wrappers/ace/
-L/home/user/Documents/ACE_wrappers/
-o "TAOServer" ./myMain.o ./MyServer.o
./MyMain.o: In function 'ACE_InputCDR:~ACE_InputCDR()':
/home/user/Documents/ACE_wrappers/ace/CDR_Stream.inl:627: undefined reference to ACE_Message_Block::~ACE_Message_Block()
./MyServer.o: In function 'CORBA::ORB:decr_refcount()':
/home/user/Documents/ACE_wrappers/Tao/tao/ORB.inl:45: undefined reference to CORBA::ORB~ORB();
Связывание не выполняется. Нет, ваш путь «включения» определяет, сможете ли вы найти файл заголовка. Путь «библиотека» используется для связи с объектными файлами или файлами библиотеки. Ссылка не работает.
Отсутствующие функции являются деструкторами для классов ACE_Message_Block и ORB. Найдите исходные файлы для них, скомпилируйте их и убедитесь, что скомпилированные объектные файлы находятся в пути к библиотеке вашего проекта.
Других решений пока нет …