dyld: Perpustakaan tidak dimuat ... Alasan: Gambar tidak ditemukan

293

Ketika mencoba menjalankan executable saya telah dikirim di Mac OS X, saya mendapatkan kesalahan berikut

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

Saya telah menginstal perpustakaan peningkatan dan mereka berada di /opt/local/lib. Saya pikir masalahnya ada hubungannya dengan executable hanya mencari di direktori itu seperti ketika saya menempelkan 'libboost_atomic.dylib' di sana, tidak masalah lagi. Sayangnya kemudian mengeluh tidak dapat menemukan perpustakaan boost berikutnya.

Apakah ada cara mudah untuk memperbaikinya?

rwolst
sumber
Jika Anda masih memiliki masalah, gunakan metode dari topik
Tarik

Jawaban:

171

Temukan semua perpustakaan pendorong:

$ 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)

dan untuk masing-masing libboost_xxx.dylib, lakukan:

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

dan akhirnya verifikasi menggunakan otoollagi:

$ 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)

Halaman manual: otool install_name_tool

EDIT Beberapa waktu yang lalu saya menulis skrip python ( copy_dylibs.py) untuk menyelesaikan semua hal ini secara otomatis saat membuat aplikasi. Ini akan mengemas semua perpustakaan dari /usr/localatau /opt/localke dalam bundel aplikasi dan memperbaiki referensi ke perpustakaan yang akan digunakan @rpath. Ini berarti Anda dapat dengan mudah menginstal perpustakaan pihak ketiga menggunakan Homebrew dan mengemasnya dengan mudah.

Saya sekarang telah membuat skrip ini publik di github .

trojanfoe
sumber
4
@trojanfoe dapatkah Anda jelaskan di sini apa exefile itu menjadi jalur file exec alat? bukan?
VenushkaT
1
Setelah mengkompilasi ulang executable saya harus mengulangi proses ini - cukup mengganggu selama pengembangan.
tglas
2
Sebenarnya cara yang lebih baik adalah menggunakan DYLD_LIBRARY_PATHuntuk memodifikasi jalur pencarian. Jawaban yang lain telah mendapatkan ini.
frankliuao
18
'exefile': Tidak ada file atau direktori seperti itu
ScottyBlades
2
@ScottyBlades exefileadalah singkatan dari file yang dapat dieksekusi yang Anda coba jalankan. Dalam kasus saya, otool -L /usr/local/bin/phplakukan triknya.
brunouno
106

Di Generaltab target , ada bagian yang disebutFrameworks, Libraries, and Embedded Content

Klik pada +tanda, tambahkan yang diperlukan frameworkdan crash itu teratasi.

Perbarui tangkapan layar xcode terbaru

Himanshu padia
sumber
2
apa yang harus saya tambahkan? ada banyak file
Joe Sleiman
@ Himanshu Saya punya libcppreset untuk proyek saya! ia memiliki banyak ketergantungan dari boost dan ... Saya menjalankan skrip bash untuk mengubahnya dengan install_name_tool tetapi untuk itu LC_ID_DYLIBsaya tidak perlu membuat symlink di usr / loca / opt! apakah ada cara untuk mencari tahu? : | Ini menyakitkan :(
Mo Farhand
85

Ini bekerja untuk saya:

brew upgrade node
oshaiken
sumber
7
Apa yang sedang dilakukan ini?
diegoaguilar
3
@diegoaguilar ini menginstal ulang nodemenggunakan homebrew. Mungkin instalasi lain mematahkan jalur simpul. Juga bekerja untuk saya.
Hugo Nogueira
68

Setelah memutakhirkan Mac OS ke Mojave. Saya mencoba menginstal modul npm melalui yarnperintah yang saya dapatkan kesalahan:

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

Diperbaiki dengan:

brew update
brew upgrade
Michael Klishevich
sumber
2
IntelliJ saya mulai melempar kesalahan ini ketika saya baru saja memperbarui xcode. Saya mencoba menjalankan server node.js melalui intellij. Saya tidak yakin apa yang salah. Berjalan node --versiondi sistem saya menghasilkan kesalahan yang sama. Menjalankan dua perintah di atas memecahkan masalah saya.
Ishan
3
Dalam kasus saya, saya juga menjalankan brew cleanupperintah, yang bagus untuk dilakukan kadang-kadang jika Anda ingin menyingkirkan versi lama.
Michael Behrens
Mengenai komentar @ MichaelBehrens, saya jalankan brew cleanupkemudian diperbaiki.
Buraco
37

Bagi sebagian orang, ini bisa semudah mengatur jalur sistem untuk pustaka dinamis. Pada OS X, ini sesederhana mengatur DYLD_LIBRARY_PATHvariabel lingkungan. Lihat:

Apakah boleh menggunakan DYLD_LIBRARY_PATH di Mac OS X? Dan, apa algoritma pencarian pustaka dinamis dengan itu?

markshiz
sumber
Ini mungkin terlihat bodoh, tetapi saya ingin tahu nilai apa yang harus saya tetapkan DYLD_LIBRARY_PATH?
Caesar
1
@Caesar Setel ke direktori di mana pun dylibs yang ingin Anda tautkan berada.
markshiz
Anda tidak bisa berharap pengguna Anda berubah DYLD_LIBRARY_PATH. Solusi yang benar adalah dengan memasukkan pustaka non-standar dengan .appdan pengguna tidak perlu melakukan apa pun. Namun, pengembang mungkin masih harus meretas jalur pemuat sesuai jawaban saya.
trojanfoe
12

Saya mendapatkan kesalahan ini ketika saya mencoba menginstal ruby ​​2.3.1 menggunakan rvm. Pertama-tama saya disuruh berlari brew update, yang saya lakukan, dan kemudian ketika saya mencoba berlari rvm install ruby-2.3.1, saya menerima kesalahan dalam pertanyaan SO ini.

Cara mengatasinya adalah menjalankan pertama kali brew upgrade, tampaknya sesuai dengan pertanyaan superuser.com ini , Anda harus melakukan keduanya brew update&& brew upgrade. Setelah selesai, saya akhirnya bisa menginstal ruby ​​2.3.1.

IonicBurger
sumber
Orang-orang perlu berhenti merekomendasikan melakukan brew upgradehal itu. Ini bisa menjadi pengganggu besar bagi seluruh sistem seseorang. Sebaliknya, pisahkan apa yang perlu ditingkatkan dan tingkatkan itu saja.
Jivan
7

Anda dapat menggunakan perintah otool dengan opsi -L untuk executable, yang akan menampilkan di mana executable mengharapkan pustaka tersebut berada.

Jika path ke yang perlu diubah, gunakan perintah install_name_tool , yang memungkinkan Anda untuk mengatur path ke perpustakaan.

Kesatria Kegelapan
sumber
7

Sekarang Xcode telah memutakhirkan IDE mereka, mereka telah sedikit mengubah cara kerjanya.

Dulu dibagi menjadi bagian terpisah seperti yang ditunjukkan di atas dengan 'Binari Tersemat' dan 'Kerangka Kerja Tertaut dan Perpustakaan' sebagai bagian terpisah.

Sekarang, ini adalah satu bagian gabungan dengan drop-down di sebelah kanan untuk apa yang harus disematkan.

Perubahan IDE Baru

Ini membingungkan saya pada awalnya, tetapi masuk akal sekarang.

Jay Snayder
sumber
5

Saya sampai di sini mencoba menjalankan program yang baru saja saya kompilasi menggunakan CMake. Ketika saya mencoba menjalankannya, ia mengeluh mengatakan:

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

Saya menghindari masalah memberitahu CMake untuk menggunakan versi statis Boost, alih-alih membiarkannya menggunakan yang dinamis:

set(Boost_USE_STATIC_LIBS ON)
Lucio Paiva
sumber
5

Jika Anda menggunakan Xcode 11 dan seterusnya:

Buka Generaltab dan tambahkan kerangka kerja di Frameworks, Libraries, and Embedded Contentbagian.

Penting: Secara default mungkin ditandai sebagai Do Not Embed, ubah menjadi Embed Without Signingseperti yang ditunjukkan pada gambar dan Anda siap melakukannya.

masukkan deskripsi gambar di sini

Untuk versi Xcode di bawah 11:

Cukup tambahkan kerangka kerja di Embedded Binariesbagian dan Anda selesai.

Bersulang!

atulkhatri
sumber
5

Untuk mengatasi kesalahan di bawah ini di Macbook Catalina 10.15.4 saya:

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

Saya menjalankan perintah di bawah ini dan menyelesaikan masalah di atas:

brew switch openssl 1.0.2s
Kwex
sumber
3

Saya memperbaiki masalah ini dengan menggunakan Product > Clean Build Folder( CommandShiftK), yang membuat bangunan bersih baru, benar-benar aneh.

Douglas Pfeifer
sumber
2

Anda dapat menggunakan sudo install_name_tool -changeubah jalur dylib dan sudo install_name_tool -idubah nama dylib

hailuodev
sumber
2

Saya memperbaikinya dengan brew install libpng

pengguna3835452
sumber
2

Jika Anda menggunakan cmake, tambahkan DYLIB_INSTALL_NAME_BASE "@rpath"ke properti target:

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}"
    )

atau dalam target proyek perpustakaan dinamis Xcode -> Pengaturan Bangun set Dynamic Library Instal Nama Basis ke @rpath

cn00
sumber
Saya membuat proyek library dynamic framework cocoa, berfungsi, dan dibandingkan dengan proyek bad cmake yang saya hasilkan menemukan ini berbeda, dan memperbaikinya, ia bekerja di iOS.
cn00
2

jika Anda menggunakan virtualenv cukup hapus folder lingkungan Anda dan buat ulang dengan perintah ini virtualenv --python=/usr/local/bin/python3 the_name_of_my_env

bormat
sumber
1

Bagi siapa pun yang datang ke halaman ini karena mereka mendapatkan kesalahan ini ketika mencoba untuk menghubungkan kerangka kerja pihak ketiga ke proyek mereka menggunakan Xcode 6.3.1, masalah yang saya temui adalah karena perpustakaan sedang dibuat dengan versi kompiler yang lebih lama menggunakan versi yang berbeda cepat. Satu-satunya cara untuk memperbaikinya bagi saya adalah membangun kembali kerangka itu.

Alasan lain Anda mungkin mendapatkan ini dinyatakan dalam dokumen teknis Apple ..

Jika Anda membuat aplikasi yang tidak menggunakan Swift tetapi menyematkan konten seperti kerangka kerja yang melakukannya, Xcode tidak akan menyertakan pustaka ini di aplikasi Anda. Akibatnya, aplikasi Anda akan macet saat diluncurkan dengan pesan kesalahan seperti berikut:

setel Embedded Content Contains Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT) pengaturan bangunan ke YA di aplikasi Anda

Berikut ini tautan ke dokumen lengkap Apple yang menjelaskannya di sini

bolnad
sumber
1

Untuk kerangka kerja saya, saya menggunakan subproyek Xcode yang ditambahkan sebagai submodule git.

Saya yakin saya mendapatkan kesalahan ini karena saya menandatangani kerangka kerja dengan Tim penandatangan yang berbeda dari aplikasi utama saya. (beralih tim untuk aplikasi; lupa beralih untuk kerangka kerja)

Solusi adalah tidak masuk dalam proyek kerangka kerja. Sebaliknya, di bagian aplikasi utama Target > General > Frameworks, Libraries, and Embedded Content, tandatangani kerangka kerja via Embed & Sign.

Jika saya memilih Do not Embedatau Embed Without Signingsaya malah mendapatkan kesalahan:

FRAMEWORK tidak valid untuk digunakan dalam proses menggunakan Library Validation: file yang dipetakan tidak memiliki cdhash, sama sekali tidak ditandatangani? Kode setidaknya harus ditandatangani ad-hoc.

pkamb
sumber
1

Xcode 11.1 & Swift 5.1

Perbaikan Cepat

Pertama-tama pastikan bahwa perpustakaan tambahan eksternal memiliki opsi embed dipilih di Tab Umum, Biner Tersemat.

Jika masih tidak berhasil ..

Ini terjadi karena Anda memiliki versi pustaka yang berbeda dan tak tertandingi.

Perbarui Pods

pod update

Penting: Periksa semua pustaka termasuk dalam Pengaturan Bangun -> pustaka dan daftar kerangka kerja dan Anda telah memberikan opsi untuk menyematkan di pabrikan

Hanya bekerja dengan luar biasa

Saranjith
sumber
0

Bagi siapa pun yang mengalami hal yang sama dengan pustaka atau paket yang berbeda, @ user3835452 berada di jalur yang benar. Saya menemukan pesan ini ketika mencoba menjalankan composer:

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

Setelah mencoba banyak cara berbeda saya hanya berlari brew install openldapdan memperbaikinya. Perhatikan bahwa saya sudah menjalankan brew updatedan brew upgradetetapi hanya setelah saya menginstal secara manual openldapapakah itu benar-benar berfungsi.

brunouno
sumber
0

Saya memperbaikinya dengan menginstal ulang Homebrew

Copot pemasangan

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

Install

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

sidonaldson
sumber
0

Apakah ada cara mudah untuk memperbaikinya?

Saya baru saja digunakan brew upgrade <the tool>. Dalam kasus saya brew upgrade tmux,.

Bingung00
sumber
0

Saya menghadapi masalah aplikasi yang mengutip kesalahan SIGABRT di thread.Overview dari crash adalah library yang tidak dimuat dan gambar tidak menemukan sesuatu seperti itu.

Ini terlihat di Xcode 9.3. Alasan saya mengetahuinya adalah Xcode tidak mengambil perpustakaan secara dinamis jadi saya harus melakukannya secara manual yang menyelesaikan masalah mogok saya.

Ikuti langkah-langkah di bawah ini:

  1. Pergi ke Build Phases
  2. Tekan tombol '+' di bagian atas dan pilih "Fase File Salin Baru"
  3. Pilih Tujuan sebagai Kerangka Kerja dan Tekan tombol '+' di bawah untuk menambahkan file.
  4. Pilih Tambah Lainnya di bawah, klik CMD + SHIFT + G dan tempelkan lintasan di bawah ini, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Sekarang Anda akan dapat melihat beberapa dylibs cepat, Pilih semua perpustakaan cepat dengan ekstensi .dylib dan klik terbuka.

Ini akan ditambahkan ke binari tertanam di tab umum aplikasi.

Buat grup baru di folder proyek dan tambahkan semua perpustakaan ini.

Sekarang jalankan aplikasi Anda.

Miya Mirza
sumber
0

Jika Anda menggunakan lingkungan Conda di terminal, perbarui samtools untuk menyelesaikannya.

Conda install -c bioconda samtools

Shrm
sumber
0

Jawaban terbaik dijawab di atas, periksa dulu apa hasilnya

otool -L

Dan kemudian lakukan hal berikut jika salah

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

Dan

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"
sandroid
sumber
0

ini harus memperbaiki masalah

brew update
brew upgrade
brew cleanup
Walterwhites
sumber
-1

Tidak ada yang di atas bekerja untuk saya, tetapi brew reinstall icu4cternyata berhasil.

Pierre Monico
sumber
-1

Bagi siapa pun yang mungkin masih mengalami masalah ini:

Ini adalah masalah yang sedang berlangsung di pihak Apple, dan yang berhasil bagi saya adalah meningkatkan ke ios 13.4 (beta). Menginstalnya dan bekerja seperti pesona.

ChiefMalone
sumber
ini bukan masalah iOS.
JBarros35