Eclipse c++ 引用外部库 (ACE+TAO)
Eclipse c++ Referencing external library (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 无法 link 到 .cpp 文件来实现这两种方法?我的.h文件和.cpp文件在同一个文件夹目录下。
3) 我认为可能是因为我在库路径中没有.o 文件,所以我运行 'make' 并在同一目录中生成了.o 文件,但我仍然得到同样的错误。
我missing/misunderstanding是什么东西吗?提前致谢。
更新:
这是用于构建我的项目的 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();
链接失败。不行,你的"include"路径决定了你能不能找到头文件。 "library" 路径用于链接目标文件或库文件。链接无效。
缺少的函数是 类 ACE_Message_Block 和 ORB 的析构函数。找到它们的源文件,编译它们,并确保编译后的目标文件位于项目的库路径中。
我有一个 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 无法 link 到 .cpp 文件来实现这两种方法?我的.h文件和.cpp文件在同一个文件夹目录下。
3) 我认为可能是因为我在库路径中没有.o 文件,所以我运行 'make' 并在同一目录中生成了.o 文件,但我仍然得到同样的错误。
我missing/misunderstanding是什么东西吗?提前致谢。
更新: 这是用于构建我的项目的 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();
链接失败。不行,你的"include"路径决定了你能不能找到头文件。 "library" 路径用于链接目标文件或库文件。链接无效。
缺少的函数是 类 ACE_Message_Block 和 ORB 的析构函数。找到它们的源文件,编译它们,并确保编译后的目标文件位于项目的库路径中。