1

私はOpenCVに決定的に依存するプログラムを書きました。私は最新の安定バージョンからOpenCVをコンパイルしましたが、OpenCVを自分でコンパイルする必要がないように、このプログラムを配布したいと思います。プログラム自体はg++を使用してコンパイルされます。

私はこの問題を解決するためにいくつかのことを試みました:

  1. OpenCVを静的ライブラリとしてコンパイルすることはできますが、OS Xの一部のライブラリは静的にリンクできないため、プログラムをこれらのライブラリに静的にリンクすることはできません。私はここでこの情報を見つけました:MacOSでの静的リンクと動的リンクの混合

  2. XCodeに移動して、コマンドラインプロジェクトとして使用しました。検索パスとインストール場所を@rpathに設定し、ファイルを実行可能ファイルにコピーするためのビルドフェーズを追加しました。コンパイルされたファイルに正しいリンクがあるかどうかをotoolで確認しましたが、クリーンなマシン(OpenCVライブラリがないマシン)では「ライブラリが見つかりません@ rpath /libopencv...」エラーで失敗します。(はい、すべてのMacはLionを使用しているため、@ rpathが機能するはずです)。この答えはここで見つかりました:Xcodeは間違ったパスでdylibを検索し続けます

コンパイルされたファイルとライブラリの両方でrunnigotool-Lから得られる結果は次のとおりです。 @rpath/libopencv_core.2.4.dylib (compatibility version 2.4.0, current version 2.4.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

だから...私は何が間違っているのですか?そして、どうすればこれらのライブラリをプログラムと一緒に配布できますか?

4

2 に答える 2

2

フレームワークを使用する必要があります(フレームワークに関するSOの質問)。アプリが使用するすべてのものを1つのフォルダーにまとめてから、XCodeプロジェクトのフレームワークにリンクします。

于 2012-05-30T11:32:56.937 に答える
1

アプレットでJavaCVを実行するには、最近それを行う必要がありました。このコマンドは仕事を終わらせるはずです:

BADPATH=/opt/local/lib  # in the case of MacPorts, change as necessary
for f in libopencv*2.4.dylib; do install_name_tool $f -id @rpath/$f \
    -add_rpath /opt/local/lib/ -add_rpath /usr/local/lib/ -add_rpath @loader_path/. \
    -change $BADPATH/libopencv_core.2.4.dylib @rpath/libopencv_core.2.4.dylib \
    -change $BADPATH/libopencv_calib3d.2.4.dylib @rpath/libopencv_calib3d.2.4.dylib \
    -change $BADPATH/libopencv_features2d.2.4.dylib @rpath/libopencv_features2d.2.4.dylib \
    -change $BADPATH/libopencv_flann.2.4.dylib @rpath/libopencv_flann.2.4.dylib \
    -change $BADPATH/libopencv_gpu.2.4.dylib @rpath/libopencv_gpu.2.4.dylib \
    -change $BADPATH/libopencv_highgui.2.4.dylib @rpath/libopencv_highgui.2.4.dylib \
    -change $BADPATH/libopencv_imgproc.2.4.dylib @rpath/libopencv_imgproc.2.4.dylib \
    -change $BADPATH/libopencv_legacy.2.4.dylib @rpath/libopencv_legacy.2.4.dylib \
    -change $BADPATH/libopencv_ml.2.4.dylib @rpath/libopencv_ml.2.4.dylib \
    -change $BADPATH/libopencv_nonfree.2.4.dylib @rpath/libopencv_nonfree.2.4.dylib \
    -change $BADPATH/libopencv_objdetect.2.4.dylib @rpath/libopencv_objdetect.2.4.dylib \
    -change $BADPATH/libopencv_photo.2.4.dylib @rpath/libopencv_photo.2.4.dylib \
    -change $BADPATH/libopencv_video.2.4.dylib @rpath/libopencv_video.2.4.dylib; done

そして、それらと目的の「-rpath」オプションを使用してソフトウェアを再リンクします。

于 2012-05-30T13:59:06.953 に答える