1

Linux(ubuntu)システムにプラグイン(動的共有ライブラリ)を使用した独自のプログラムがあります。私のライブラリ (プラグイン) は OpenCV を使用しています (あまり重要ではないかもしれません)。

私のプラグインは /usr/local/lib/mysoft/ にあります。

ライブラリを使用してもプログラムを正常にコンパイルし、正常にインストールされたので、この時点まではすべて問題ないようです。

プログラムを実行すると、構成ファイルに基づいてこれらのライブラリの束が読み込まれます。正常にロードされたライブラリがいくつかありますが、1 つのライブラリをロードできません。ロード時にエラーが発生します(ライブラリを開くために dlopen() を使用しました):

/usr/local/lib/mysoft/libMyPlugin2.so: undefined symbol: _ZN2cv6resizeERKNS_11_InputArrayERKNS_12_OutputArrayENS_5Size_IiEEddi
Segmentation fault (core dumped)
Tue Nov 20 19:11:29 CET 2012

OpenCV の一部である cv::resize を見つけるには明らかにいくつかの問題がありますが、その理由はわかりません。

次のことを確認しました。

  • OpenCV は、他のライブラリも同様に使用し、問題なくロードされるため、おそらく正しくインストールされています。
  • 私のプログラム、libMyPlugin2.soまたはOpenCVの依存関係はありません(lddでチェック)
  • すべてのライブラリとバイナリのアーキテクチャは同じようです (objdump -f で確認しました)

誰かが私が間違っていることを知っていますか?

この投稿は非常に関連性があるようですが、それでも役に立ちませんでした: Linux shared library that uses a shared library undefined symbol

4

1 に答える 1

1

さて私は問題を見つけました、うまくいけばそれは他の人を助けることができます...

問題-コンパイル時に1つのOpenCVライブラリがありませんでした。そこで、「opencv_coreopencv_highgui」を「opencv_coreopencv_imgproc opencv_highgui」に置き換えれば、すべてが機能します。

したがって、コンパイルすることはできましたが、依存関係の1つが欠落していました-OpenCVで何かが変更されたため、これらのソースは古いバージョンのOpenCVで完全に機能しました(ビルドでも)。

于 2012-11-21T18:15:30.620 に答える