2016-04-25 13 views
1

g ++を使用してプロジェクト(実行可能なmono_kitti)をリンクしています。私のプロジェクトはthirdpartyライブラリPangolinに依存しています。動的ファイルへのリンクと入力オブジェクトとの違いは何ですか?

mono_kitti.o:(.data+0x0): undefined reference to `vtable for pangolin::Handler' 
mono_kitti.o:(.data+0x8): undefined reference to `vtable for pangolin::HandlerScroll' 
mono_kitti.o: In function `pangolin::Handler::~Handler()': 
mono_kitti.cc:(.text._ZN8pangolin7HandlerD2Ev[_ZN8pangolin7HandlerD5Ev]+0x13): undefined reference to `vtable for pangolin::Handler' 
mono_kitti.o: In function `pangolin::HandlerScroll::~HandlerScroll()': 
mono_kitti.cc:(.text._ZN8pangolin13HandlerScrollD2Ev[_ZN8pangolin13HandlerScrollD5Ev]+0x13): undefined reference to `vtable for pangolin::HandlerScroll' 
collect2: error: ld returned 1 exit status 

をしかし、私はこのコマンドを使用する場合:

g++ -L../../lib -lORB_SLAM2 -lpangolin mono_kitti.o -o mono_kitti 

それが返されます。

g++ -L../../lib -lORB_SLAM2 mono_kitti.o /usr/local/lib/libpangolin.so -o mono_kitti 

はそれが成功した私は-lpangolinオプションとのリンクアクションを行うと。

しかし、それは私が彼らの順序を入れ替えるしようとしたときに再び失敗しました:

g++ -L../../lib -lORB_SLAM2 /usr/local/lib/libpangolin.so mono_kitti.o -o mono_kitti 

をして(-lpangolinオプション)上記の最初のケースと同じものを返します。

私は、これらの結果については非常に困惑している、誰かがそれらの間differeceを説明できるだろうか?どうもありがとう!

+1

注文事項は、コマンドラインで後* *オブジェクトファイルをライブラリを置きます。 –

答えて

1

リンカーがライブラリ(あなたの場合は-lpangolinオプション)を見ると、まだそのライブラリへの未解決の参照がないので、それを破棄します。

ライブラリの前にオブジェクトファイルを置く場合は、ので、あなたのコマンドラインは、例えば次のようになり

g++ mono_kitti.o -L../../lib -lORB_SLAM2 -lpangolin -o mono_kitti 

はその後、リンカはmono_kitti.oからのすべての未解決の参照を持っているとライブラリからそれらを引っ張ってきます。

関連する問題