dyld:ライブラリがロードされていません…理由:画像が見つかりません


293

Mac OS Xで送信された実行可能ファイルを実行しようとすると、次のエラーが発生します

dyld: Library not loaded: libboost_atomic.dylib
  Referenced from: /Users/"Directory my executable is in"
  Reason: image not found
Trace/BPT trap:5

ブーストライブラリをインストールしました/opt/local/lib。これらはにあります。私は問題が実行可能ファイルに関係していると思います。'libboost_atomic.dylib 'をそこに貼り付けたとき、それはもう気にしません。残念なことに、次のブーストライブラリが見つからないというメッセージが表示されます。

これを修正する簡単な方法はありますか?


それでも問題がある場合は、このトピックの
Tarik

回答:


171

すべてのboostライブラリを見つける:

$ otool -L exefile
exefile:
        @executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

それぞれに対してlibboost_xxx.dylib、次のようにします。

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

そして最後にotoolもう一度使用して確認します:

$ otool -L exefile
exefile:
        /opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

マンページ: otool install_name_tool

編集しばらく前にcopy_dylibs.py、アプリを構築するときにこれらすべてを自動的に処理するpythonスクリプト()を書きました。それから、すべてのライブラリをパッケージ化します/usr/localまたは/opt/local使用するために、これらのライブラリにアプリケーションバンドルと修正参照に@rpath。つまり、Homebrewを使用してサードパーティのライブラリを簡単にインストールし、パッケージ化するのも同じくらい簡単です。

このスクリプトをgithubで公開しました。


4
@trojanfoeここで、exefileとは何ですか?それはツールのexecファイルパスですか?じゃないですか
VenushkaT 14

1
実行可能ファイルを再コンパイルした後、私はこのプロセスを繰り返さなければなりません-開発中に非常に迷惑です。
tglas 2017

2
実際には、を使用DYLD_LIBRARY_PATHして検索パスを変更するのがより良い方法です。他の答えはこれを持っています。
frankliuao

18
'exefile':そのようなファイルまたはディレクトリはありません
ScottyBlades

2
@ScottyBlades exefileは、実行しようとしている実行可能ファイルを表します。私の場合、otool -L /usr/local/bin/phpトリックをしました。
brunouno

106

ターゲットのGeneralタブには、Frameworks, Libraries, and Embedded Content

+記号をクリックし、必須frameworkを追加すると、クラッシュが解決します。

最新のxcodeスクリーンショットを更新する


2
何を追加すればよいですか?たくさんのファイルがあります
Joe Sleiman

@Himanshu私のプロジェクトにはlibcppresetがあります!boostには多くの依存関係があります。... bashスクリプトを実行してinstall_name_toolで変更しますがLC_ID_DYLIB、usr / loca / optにシンボリックリンクを作成する必要はありません。理解する方法はありますか?:| それは痛いです:(
Mo Farhand

85

これは私のために働きました:

brew upgrade node

7
しかし、これは何をしているのですか?
diegoaguilar

3
@diegoaguilarこれはnodehomebrewを使用して再インストールしています。おそらく別のインストールがノードパスを壊しました。また私のために働いた。
Hugo Nogueira、

68

Mac OSをMojaveにアップグレードした後。yarnエラーが発生したコマンドを使用してnpmモジュールをインストールしようとしました。

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
  Referenced from: /usr/local/bin/node
  Reason: image not found
Abort trap: 6

で修正されました:

brew update
brew upgrade

2
最近xcodeを更新したとき、intelliJがこのエラーをスローし始めました。intellijを介してnode.jsサーバーを実行しようとしました。何が悪いのか分かりませんでした。node --version私のシステムで実行すると、同じエラーが発生しました。上記の2つのコマンドを実行すると、問題が解決しました。
Ishan

3
私の場合、brew cleanupコマンドも実行しました。古いバージョンを削除したい場合は、このコマンドを実行すると便利です。
Michael Behrens

@MichaelBehrensのコメントについては、実行する brew cleanupと修正されました。
Buraco

37

動的ライブラリのシステムパスを設定するのと同じくらい簡単な場合もあります。OS Xでは、これはDYLD_LIBRARY_PATH環境変数を設定するのと同じくらい簡単です。見る:

Mac OS XでDYLD_LIBRARY_PATHを使用しても問題ありませんか?そして、それを使った動的ライブラリ検索アルゴリズムは何ですか?


ばかげているように見えるかもしれませんが、どのような値に設定すればよいのDYLD_LIBRARY_PATHでしょうか。
シーザー

1
@Caesarリンクしようとしているdylibがある場所のディレクトリに設定します。
markshiz 2017年

ユーザーが変更することを期待することはできませんDYLD_LIBRARY_PATH。正しい解決策は、非標準ライブラリをに含めることで.appあり、ユーザーは何もする必要はありません。ただし、開発者は私の答えに従ってローダーパスをハッキングする必要がある場合があります。
trojanfoe

12

このエラーは、rvmを使用してruby 2.3.1をインストールしようとしたときに発生しました。最初に実行するように言われましたがbrew update、実行しようとするとrvm install ruby-2.3.1、このSOの質問でエラーを受け取りました。

修正は最初に実行することでしたbrew upgrade、明らかにこのsuperuser.comの質問によれば、brew update&&の両方を実行する必要がありますbrew upgrade。それが終わったら、ようやくruby 2.3.1をインストールできました。


人々はbrew upgradeそのようにすることを勧めるのをやめる必要があります。これは、システム全体の大きな混乱を招く可能性があります。代わりに、アップグレードが必要なものを分離し、それだけをアップグレードしてください。
ジバン

7

実行可能ファイルに-Lオプションを指定してotoolコマンドを使用すると、実行可能ファイルがそれらのライブラリがあると想定している場所が表示されます。

それらのパスを変更する必要がある場合は、install_name_toolコマンドを使用して、ライブラリへのパスを設定できます。


7

XcodeがIDEをアップグレードしたため、この機能の動作が少し変わりました。

以前は「組み込みバイナリ」と「リンクされたフレームワークとライブラリ」を別々のセクションとして示したように、これは別々のセクションに分割されていました。

これは、何を埋め込むかについて右側にドロップダウンがある1つの結合セクションです。

新しいIDEの変更

これは最初は混乱しましたが、今では完全に理にかなっています。


5

CMakeを使用してコンパイルしたばかりのプログラムを実行しようとしています。私がそれを実行しようとすると、それは不平を言う:

dyld: Library not loaded: libboost_system.dylib
  Referenced from: /Users/path/to/my/executable
  Reason: image not found

CMakeに動的バージョンを使用させるのではなく、静的バージョンのBoostを使用するように指示する問題を回避しました。

set(Boost_USE_STATIC_LIBS ON)

5

Xcode 11以降を使用している場合:

Generalタブに移動し、Frameworks, Libraries, and Embedded Contentセクションにフレームワークを追加します。

重要:デフォルトではとマークされている場合がありますが、画像に示すようにDo Not Embed変更すれば問題Embed Without Signingありません。

ここに画像の説明を入力してください

Xcodeバージョンが11未満の場合:

Embedded Binariesセクションにフレームワークを追加するだけで完了です。

乾杯!


5

Macbook Catalina 10.15.4で以下のエラーを解決するには:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
    Referenced from: /usr/local/bin/mongoexport
    Reason: image not found
Abort trap: 6

以下のコマンドを実行して、上記の問題を回避しました。

brew switch openssl 1.0.2s

3

Product > Clean Build FolderCommandShiftK)を使用してこの問題を修正しました。これにより、新しいクリーンビルドが奇妙になります。


2

sudo install_name_tool -changedylibパスの sudo install_name_tool -id変更とdylib名の変更を使用できます



2

cmakeを使用する場合は、DYLIB_INSTALL_NAME_BASE "@rpath"ターゲットプロパティに追加します。

set_target_properties(target_dyLib PROPERTIES
        # # for FRAMEWORK begin
        # FRAMEWORK TRUE
        # FRAMEWORK_VERSION C
        # MACOSX_FRAMEWORK_IDENTIFIER com.cmake.targetname
        # MACOSX_FRAMEWORK_INFO_PLIST ./Info.plist
        # PUBLIC_HEADER targetname.h
        # # for FRAMEWORK end
        IPHONEOS_DEPLOYMENT_TARGET "8.0"
        DYLIB_INSTALL_NAME_BASE "@rpath" # this is the key point
        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
        DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}"
    )

またはXcodeのダイナミックライブラリプロジェクトにターゲット- >ビルド設定セットの動的ライブラリは、名前ベースのインストール@rpath


私はココアフレームワークの動的ライブラリプロジェクトを作成し、それが機能し、私の悪いcmakeで生成されたプロジェクトと比較して、この違いを見つけ、修正しました。iOSで機能します。
cn00

2

virtualenvを使用する場合は、環境のフォルダーを削除して、このコマンドで再作成します virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Xcode 6.3.1を使用してサードパーティのフレームワークをプロジェクトにリンクしようとしてこのエラーが発生したためにこのページにアクセスした人にとって、私が遭遇した問題は、ライブラリが異なるバージョンを使用して古いバージョンのコンパイラで作成されていたためでした迅速な。これを修正する唯一の方法は、フレームワークを再構築することでした。

これが表示されるもう1つの理由は、アップルのテクニカルドキュメントに記載されています。

Swiftを使用せず、フレームワークなどのコンテンツを埋め込むアプリを作成する場合、Xcodeはこれらのライブラリをアプリに含めません。その結果、アプリは起動時にクラッシュし、次のようなエラーメッセージが表示されます。

アプリで埋め込みコンテンツにスウィフトコードを含む(EMBEDDED_CONTENT_CONTAINS_SWIFT)ビルド設定をYESに設定します

ここにそれを説明する完全なAppleドキュメントへのリンクがあります


1

私のフレームワークでは、gitサブモジュールとして追加されたXcodeサブプロジェクトを使用していました。

メインアプリとは異なる署名チームでフレームワークに署名していたため、このエラーが発生したと思います。(アプリの切り替えられたチーム。フレームワークの切り替えを忘れた)

解決策は、フレームワークプロジェクト内で署名しないことです。代わりに、メインアプリのTarget > General > Frameworks, Libraries, and Embedded Contentセクションで、を介してフレームワークに署名しEmbed & Signます。

選択した場合、Do not EmbedまたはEmbed Without Signing代わりにエラーが発生した場合:

FRAMEWORKは、ライブラリ検証を使用するプロセスでの使用には有効ではありません:マップされたファイルにはcdhashがなく、完全に署名されていませんか?コードには少なくともアドホック署名が必要です。


1

Xcode 11.1およびSwift 5.1

クイックフィックス

最初に、外部追加ライブラリに[埋め込み]オプションが[一般]タブの[埋め込みバイナリ]で選択されていることを確認します。

それでもうまくいかない場合

これは、ライブラリのバージョンが異なる、一致していないために発生します。

ポッドを更新する

pod update

重要:すべてのライブラリが[ビルド設定]-> [ライブラリとフレームワーク]リストに含まれており、ビルドに埋め込むオプションが指定されていることを確認してください

ただ素晴らしい仕事


0

異なるライブラリまたはパッケージで同じことを経験している人にとっては、@ user3835452は正しい方向に進んでいます。実行しようとしたときにこのメッセージが見つかりましたcomposer

dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
  Referenced from: /usr/local/opt/php@7.1/bin/php
  Reason: image not found
Abort trap: 6

多くの異なる方法を試した後、私はただ走っbrew install openldapてそれを修正しました。既に実行brew updateしていて、brew upgrade手動でインストールopenldapした後にのみ実際に機能することに注意してください。


0

私はHomebrewを再インストールすることでこれを修正しました

アンインストール

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

インストール

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


0

これを修正する簡単な方法はありますか?

使っbrew upgrade <the tool>たばかりです。私の場合は、brew upgrade tmux


0

スレッドのSIGABRTエラーを引用するアプリクラッシュの問題に直面しました。クラッシュの概要は、dyldライブラリがロードされておらず、イメージがそのようなものを見つけられないことです。

これはXcode 9.3で見られました。Xcodeがライブラリを動的に取得していないため、クラッシュの問題を解決するために手動で実行する必要があることがわかりました。

以下の手順に従ってください:

  1. ビルドフェーズに進みます
  2. 上部の「+」ボタンを押し、「新しいコピーファイルフェーズ」を選択します
  3. フレームワークとして宛先を選択し、下の「+」ボタンをクリックしてファイルを追加します。
  4. 以下で「その他を追加」を選択し、CMD + SHIFT + Gをクリックして、以下のパスを貼り付けます。 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

これで、いくつかの迅速なdylibが表示されます。拡張子が.dylibのすべての迅速なライブラリを選択し、[開く]をクリックします。

これらは、アプリの一般タブの埋め込みバイナリに追加されます。

プロジェクトフォルダに新しいグループを作成し、これらすべてのライブラリを追加します。

アプリを実行します。


0

端末でConda環境を使用している場合は、samtoolsを更新して解決します。

conda install -c bioconda samtools


0

最良の回答は上記の最初の回答です。

otool -L

そして、間違っている場合は次のようにします

set_target_properties(
    MyTarget
    PROPERTIES
    XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS
    "@executable_path/Frameworks @loader_path/Frameworks"
)

そして

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"



-1

まだこの問題が発生している可能性がある場合:

これはApple側で進行中の問題であり、私にとってうまくいったのはios 13.4(beta)にアップグレードすることです。それをインストールして、魅力のように働きました。


これはIOSの問題ではありません。
JBarros35
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.