0

これは一種の醜いものですが、私は立ち往生しているので、ここに行きます:

opencv (highgui およびその他の部分) を使用し、最終的には ffmpeg (libavfilter) によって読み込まれる動的ライブラリ (以降、「mylib.dylib」) を作成しています。ライブラリは問題なくコンパイルされます。しかし、ffmpeg 内から dlopen() しようとすると、次のエラーが発生します。

mylib.dylib: dlopen(mylib.dylib, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib
  Referenced from: /usr/local/lib/libopencv_highgui.2.3.dylib
  Reason: Incompatible library version: libopencv_highgui.2.3.dylib requires version 17.0.0 or later, but libpng15.15.dylib provides version 16.0.0

ただし、otool -L /usr/local/lib/libpng15.15.dylib を実行すると、次のようになります。

/usr/local/lib/libpng15.15.dylib:
  /usr/local/lib/libpng15.15.dylib (compatibility version 20.0.0, current version 20.0.0)
  /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)

前回チェックしたとき、20.0.0 は 17.0.0 よりも新しいものであり、highgui が必要としているものです。

おそらくアーキテクチャの問題だと思いました(私は Lion を実行している Mac を使用しているため、i386/x86_64 で多くの問題に遭遇しました)が、すべてのライブラリで「file」を実行すると、すべて(highgui、libpng、 mylib) は、Mach-O 64 ビットの動的にリンクされた共有ライブラリ x86_64 です。

私のシステムのどこかに別のバージョンの libpng が隠れているのではないかと思いましたが、dlopen エラーは具体的に /usr/local/lib/libpng15.15.dylib を指しています。

ここで明らかに欠けているものがあります。確かに、私はこれらの動的ライブラリがどのようにリンクするかについて専門家ではありません。そのため、関連する情報を含めるのを忘れていたら、すみません。

更新 言及するのを忘れました-XCode(dlopenエラーなし)を介してffmpegを実行すると、libが正常に動作するため、XCodeが設定している環境変数と関係があると思われます。

ありがとう!

解決策 1. 私は MAMP を使用していましたが、php スクリプトを介して ffmpeg を呼び出していたので、(驚きの驚き) libpng 16.0.0 を含む独自の dylib のセットを使用していました。

4

2 に答える 2

1

コードが必要な人のために:

cd  /Applications/MAMP/Library/lib
mv libpng15.15.dylib libpng15.15.dylib_old
ln -s /usr/X11/lib/libpng15.15.dylib .
于 2011-10-03T14:52:26.387 に答える