Eclipse c ++引用外部库(ACE + TAO)

时间:2016-11-03 03:42:06

标签: c++ eclipse gcc ace tao

我有一个c ++项目,它引用了(ACE_TAO)库中的.h和.cpp文件。 (http://www.theaceorb.com/

我已将库路径包含到项目GCC C ++编译器和GCC C ++链接器中。

然而,当我尝试构建我的项目时,我一直收到错误。

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文件以实现2种方法?我的.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();

1 个答案:

答案 0 :(得分:0)

链接失败。不,您的“包含”路径决定了您是否可以找到头文件。 “库”路径用于链接目标文件或库文件。链接不起作用。

缺少的函数是ACE_Message_Block和ORB类的析构函数。找到它们的源文件,编译它们,并确保编译的目标文件位于项目的库路径中。