15

それは私のエラーです:

dyld: Library not loaded: /usr/local/lib/libofa.0.dylib
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test
Reason: image not found

私はいくつかの調査を行い、install_name_toolを使用してdylib内のパスを変更しました。

davids-macbook:Test david$ otool -L libofa.0.0.0.dylib 
libofa.0.0.0.dylib:
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

しかし、Xcodeは/ usr /lib/でそれを検索し続けます。

build/Debug/Test.app/Contents/MacOS/Test:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)

Xcodeでこれを設定する方法はありますか?ありがとう

編集:ライブラリはXcodeプロジェクトではありません。./configureを使用したビルド。作る

4

3 に答える 3

23

通常私がすることはこれです:

  1. ライブラリのインストールディレクトリをに設定し@rpathます。これにより、インストール名がに設定され@rpath/libofa.0.0.0.dylibます。ライブラリを自分で構築している場合は、Xcodeでこれを設定できます。それ以外の場合は、を使用install_name_toolして変更します。
  2. ライブラリを使用するアプリケーションの実行パス検索パスを、ライブラリを含むディレクトリの場所に設定します。たとえば、ライブラリをアプリのFrameworksディレクトリに配置する場合は、Runpath Search Paths@executable_path/../Frameworks(または@loader_path/../Frameworks)に設定します。

このブログ投稿これについて詳しく説明します。

于 2011-02-02T16:12:13.053 に答える
8

必ずdeveloper.apple.comからコマンドラインツールをインストールしてから、プロジェクトにライブラリを追加してください。Xcodeで次のスクリプトを実行します。ターゲット»ビルドフェーズ»スクリプトを実行して実行します。

install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib"

注:dylib名の前に「NO」または「」は必要ありません

于 2013-10-08T10:32:29.107 に答える
4

解決策を検討する前に、Windowsの依存ライブラリ「dll」と比較して、MACの依存ライブラリ「dylib」の新機能を知っておく必要があります。

dylibとdllの主な違いは、「インストール名」です。インストール名は、実行時にライブラリを見つける場所を示すダイナミックライブラリに組み込まれたパスです。dylibをどこにコピーするかは関係ありません。常に古いパスを指します(インストール名を変更しない場合を除く)。以下のコマンドで元の検索パス(インストール名)を知ることができます

otool -L a.dylib

(a.dylibの代わりにdylibをドラッグするだけです)

インストール名の詳細については、このリンクを参照してください。

さて、dylib( "インストール名")の新しい場所を変更するための解決策は、以下のように使用するだけinstall_name_toolです

install_name_tool -change *old path of dylb* *new path of dylib*

otool -Lすでに上記のコマンドで古いパスを取得できます(古いパス、つまり元のパス)

install_name_tool -changedylibと実行可能ファイルの検索パスも変更できます。

Run scriptプロジェクトにファイルを書き込むことで、Xcodeでこれを使用できます。

于 2014-10-29T14:44:15.293 に答える