数日前にUbuntuをインストールし、apt-getを使用してbuild_essentials、opencv、highguiなどをインストールしました。g++は4.6.1、opencvは2.1.0のようです。ソースからopencvをビルドしませんでした。
opencv機能を使用するソフトウェアがいくつかあります。ソースファイルの名前がa.cppおよびb.cppであるとしましょう。aoとboにコンパイルしてから、それらを.soライブラリ(libab.soと呼びます)に入れます。
最後に、mainを含むファイルがあります(z.cppと呼びます)。そこから実行可能ファイルを作成しようとしましたが、cv::stuffに対して大量の「未定義の参照」エラーが発生します。私のリンクラインは次のようになります。
g++ -fPIC -g z.cpp -L../lib -lab -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
次に、未定義の参照エラーが発生します(これらはすべてcv ::のものです)。
興味深いのは、.oファイルと直接リンクすると、問題なくビルドされることです。したがって、この:
g++ -fPIC -g z.cpp a.o b.o -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
動作します。
私が読んだすべてのことは、これがリンク行の順序の問題である可能性が高いことを示唆しているようですが、すべての順序順列を試し、同じ問題が発生したため、実際には問題とは思われませんが、それでも間違っている可能性があります。ライブラリを使用してこれをビルドする方法や、ライブラリにある.oファイルの完全なセットを使用してビルドしても、ライブラリ自体を使用してビルドできない場合に、動作が異なる理由はありますか?