2016-11-03 3 views
0

У меня есть проект C++, который ссылается на файлы .h и .cpp из библиотеки (ACE_TAO). (http://www.theaceorb.com/)Eclipse C++ Ссылка на внешнюю библиотеку (ACE + TAO)

Я включил пути библиотеки к компилятору проекта 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) Я включил нужный файл заголовка и затмение может разрешить файл заголовка, так что это должно означать, что мои библиотечные пути правильно правильно?

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(); 

ответ

0

Увязка не удается. Нет, ваш путь «включить» определяет, можно ли найти файл заголовка. Путь «библиотека» используется для связывания с объектными файлами или файлами библиотеки. Связь не работает.

Отсутствующие функции являются деструкторами для классов ACE_Message_Block и ORB. Найдите исходные файлы для них, скомпилируйте их и убедитесь, что скомпилированные объектные файлы находятся на пути к библиотеке для вашего проекта.

+0

Я скомпилировал исходные файлы в/home/user/Documents/ACE_wrappers/ace/and/home/user/Documents/ACE_wrappers/Tao/tao /, и я добавил оба пути к моей библиотеке. Я вижу объекты .o для ACE_Message_Block и ORB. Но я все равно получил ту же ошибку –

+0

Также проверьте, что вы указали библиотеки в командной строке. См. Здесь: http://stackoverflow.com/questions/22426574/gcc-undefined-reference-to. Если вы не укажете библиотеки по имени и пути, убедитесь, что сама библиотека, полный путь, также включена в командную строку (любые файлы .o). Кроме того, я мог бы рассмотреть возможность поиска двух файлов .inl, вызывающих проблему. Если ваши настройки ссылок правильны, это может быть проблема пространства имен, и в этом случае пространство имен, используемое для поиска класса, не соответствует правильному пространству имен. –

+0

Возможно, вам стоит опубликовать свои командные строки gcc, будет либо одна большая командная строка, либо несколько команд компиляции и/или ссылки. –

Смежные вопросы