2016-11-03 7 views
0

(ACE_TAO)ライブラリから.hと.cppファイルを参照するC++プロジェクトがあります。 (http://www.theaceorb.com/Eclipse C++外部ライブラリ(ACE + TAO)の参照

プロジェクト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のヘッダファイルを解決することができますので、これは私のライブラリパスが正しいことを意味する必要があります右?

2)私のライブラリのパスが正しい場合、2つのメソッドの実装のために.cppファイルにeclipseがリンクできないのはなぜですか?私の.hファイルと.cppファイルは同じフォルダディレクトリにあります。

3)ライブラリパスに.oファイルがないので、私は 'make'を実行し、同じディレクトリに.oファイルを生成している可能性があると思っていましたが、 。

何かが間違っている/誤解していますか?前もって感謝します。

更新: は、ここに私のプロジェクトにリンクが失敗している

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

を構築するために使用されるコマンドのEclipse C++です。いいえ、ヘッダーファイルを見つけることができるかどうかは、 "include"パスによって決まります。 「ライブラリ」パスは、オブジェクトファイルまたはライブラリファイルとのリンクに使用されます。リンクは機能していません。

欠けている機能は、クラスACE_Message_BlockとORBのデストラクタです。それらのソースファイルを見つけてコンパイルし、コンパイルされたオブジェクトファイルがプロジェクトのライブラリパス上にあることを確認します。

+0

私は/ home/user/Documents/ACE_wrappers/ace /と/ home/user/Documents/ACE_wrappers/Tao/tao /にソースファイルをコンパイルしました。私はACE_Message_BlockとORBの.oオブジェクトを参照しています。しかし、私はまだ同じエラーを受けました –

+0

また、コマンドラインでライブラリを指定したことを確認してください。こちらをご覧ください:http://stackoverflow.com/questions/22426574/gcc-undefined-reference-to。名前とパスでライブラリを指定しない場合は、ライブラリ自体(フルパス)もコマンドラインに含めます(.oファイル)。また、問題を引き起こしている2つの.inlファイルを調べることも考えられます。リンク設定が正しい場合は、名前空間の問題である可能性があります。その場合、クラスの検索に使用されている名前空間が正しい名前空間と一致しません。 –

+0

gccのコマンドラインを投稿すると、1つの大きなコマンドラインまたは複数のコンパイル/リンクコマンドラインが存在することがあります。 –

関連する問題