2

アプリケーションで cairo (1.10.2) を配布しようとしています。Homebrew を使用して必要な dylib を作成できますが、それらは OS X 10.5 に存在しない他の動的ライブラリのバージョンに依存しています (libfontconfig、libfreetype、および主に にあるその他/usr/X11/lib)。

/Developer/SDKs/MacOSX10.5.sdk/usr/X11/libこれを解決するために、ライブラリではなくの dylib を使用したいと考えています/usr/X11/lib。10.5 SDK に対して cairo をターゲットにするために見つけられるものはすべて試しました。

  • MACOSX_DEPLOYMENT_TARGET環境変数をに設定する( Homebrew10.5を呼び出すか使用する前に)brewENV
  • SDKROOT環境変数を "/Developer/SDKs/MacOSX10.5.sdk" に設定します ( brewHomebrew を呼び出すか使用する前にENV)
  • カイロの Homebrew 式の、、およびに追加-mmacosx-version-min=10.5します。CFLAGSCXXFLAGSLDFLAGS
  • カイロの Homebrew 式の、、およびに-sysroot/-isysroot /Developer/SDKs/MacOSX10.5.sdkを追加します。CFLAGSCXXFLAGSLDFLAGS
  • カイロの Homebrew 式のandに-I$(SDKROOT)/usr/X11/includeand-I$(SDKROOT)/usr/X11R6/includeを追加します。CFLAGSCXXFLAGS
  • カイロの Homebrew 式に-L$(SDKROOT)/usr/X11/lib-L$(SDKROOT)/usr/X11R6/libを追加します。LDFLAGS

cairo をビルドしている間-I/usr/X11/lib、gcc コマンド (最後にオプションを付けた状態) があるので、最初にヒットしていると思います。それを取り除く方法がわからないので、私のオプションを使用します。isysrootインクルードパスとライブラリパスがSDKで再ルートされるようになると思いました-isysrootが、何の効果もないようです。

4

1 に答える 1

1

install_name_toolcairo がライブラリを探す場所を変更するために使用できるはずです。(cairo とは何かわかりません。それは dylib であると想定しています。そうでない場合、このソリューションに対する私の信頼は大幅に低下します。)

これは、適応できるはずの作成された例です。

まず、otool -Lcairo が使用しているライブラリを確認します。この例では、libopencv_imgproc.2.3.1.dylib を使用していますが、代わりに cairo ライブラリのファイル名を使用します。

$ otool -L libopencv_imgproc.2.3.1.dylib 
libopencv_imgproc.2.3.1.dylib:
    lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
    lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)

次にinstall_name_tool -change、変更する必要があるパスを変更するために使用します。最初のパラメータは現在のライブラリ パス、2 番目は目的のライブラリ パス、3 番目はライブラリ ファイルです。の代わりにlibz.1.dylibinを探すように言っています:/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib//usr/lib

$ install_name_tool -change /usr/lib/libz.1.dylib /Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libz.1.dylib libopencv_imgproc.2.3.1.dylib 

パスを変更する必要があるライブラリごとにこれを繰り返します。otool -L変更が行われたことを示しています。

$ otool -L libopencv_imgproc.2.3.1.dylib 
libopencv_imgproc.2.3.1.dylib:
    lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
    lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
    /Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)

私の例 (およびおそらくあなたのアプリケーション) では、私のライブラリはアプリケーション バンドル以外の場所にあると想定しているため、install_name_tool -id. ライブラリをアプリケーション バンドルのFrameworksフォルダーにコピーしているので、そこを参照するように指示しています。

$install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_imgproc.2.3.1.dylib

install_name_tool呼び出しを Run Script ビルド フェーズに入れることができます。ライブラリをアプリケーション バンドルのFrameworksフォルダにコピーする場合は$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/、スクリプトがライブラリを見つけられるように、ライブラリ名の前に を追加する必要があります。

于 2011-08-24T04:47:47.190 に答える