(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();
私は/ home/user/Documents/ACE_wrappers/ace /と/ home/user/Documents/ACE_wrappers/Tao/tao /にソースファイルをコンパイルしました。私はACE_Message_BlockとORBの.oオブジェクトを参照しています。しかし、私はまだ同じエラーを受けました –
また、コマンドラインでライブラリを指定したことを確認してください。こちらをご覧ください:http://stackoverflow.com/questions/22426574/gcc-undefined-reference-to。名前とパスでライブラリを指定しない場合は、ライブラリ自体(フルパス)もコマンドラインに含めます(.oファイル)。また、問題を引き起こしている2つの.inlファイルを調べることも考えられます。リンク設定が正しい場合は、名前空間の問題である可能性があります。その場合、クラスの検索に使用されている名前空間が正しい名前空間と一致しません。 –
gccのコマンドラインを投稿すると、1つの大きなコマンドラインまたは複数のコンパイル/リンクコマンドラインが存在することがあります。 –