dyld: Kütüphane yüklenmedi… Sebep: Görüntü bulunamadı


294

Mac OS X'e gönderilmiş bir yürütülebilir dosyayı çalıştırmaya çalışırken, aşağıdaki hatayı alıyorum

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

Destek kitaplıklarını yükledim ve içinde bulundular /opt/local/lib. Sorunun sadece 'libboost_atomic.dylib' i buraya yapıştırdığımda olduğu gibi dizinde görünen yürütülebilir dosya ile ilgili bir şey olduğunu düşünüyorum, artık bununla ilgilenmiyor. Ne yazık ki bir sonraki destek kütüphanesi bulamıyor şikayet ediyor.

Bunu düzeltmenin kolay bir yolu var mı?


Hala bu Sorunlu kullanım yöntemini varsa konu
Tarik

Yanıtlar:


171

Tüm destek kitaplıklarını bulun:

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

ve her biri için libboost_xxx.dylibşunları yapın:

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

ve son olarak otooltekrar kullanarak doğrulayın :

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

Elyordamsayfalarının: otool install_name_tool

Bir süre EDIT Bir copy_dylibs.pyuygulama oluştururken otomatik olarak tüm bu işleri çözmek için bir python komut dosyası ( ) yazdı . Uygulama paketindeki /usr/localveya /opt/localuygulama paketindeki tüm kitaplıkları paketleyecek ve kullanılacak kitaplıklara başvuruları düzeltecektir @rpath. Bu, Homebrew'u kullanarak üçüncü taraf kitaplığını kolayca kurabileceğiniz ve bunları kolayca paketleyebileceğiniz anlamına gelir.

Şimdi bu betiği github'da herkese açık hale getirdim .


4
@trojanfoe burada exefile nedir bir araç exec dosya yolu olduğunu açıklayabilir misiniz? değil mi?
VenushkaT

1
Yürütülebilir dosyayı yeniden derledikten sonra bu süreci tekrarlamak zorundayım - geliştirme sırasında oldukça can sıkıcı.
tglas

2
Aslında daha iyi bir yol DYLD_LIBRARY_PATHarama yolunu değiştirmek için kullanmaktır . Diğer cevap bu.
frankliuao

18
'exefile': Böyle bir dosya veya dizin yok
ScottyBlades

2
@ScottyBlades exefile, çalıştırmaya çalıştığınız yürütülebilir dosyayı temsil eder. Benim durumumda, otool -L /usr/local/bin/phphile yaptı.
brunouno

106

Hedefin Generalsekmesinde,Frameworks, Libraries, and Embedded Content

+İşareti tıklayın, gerekli ekleyin frameworkve çökme çözüldü.

En son xcode ekran görüntüsünü güncelleme


2
ne eklemeliyim? çok fazla dosya var
Joe Sleiman

@Himanshu Projem için libcppreset var! boost ve bağımlılık bir sürü bağımlılığı vardır ... Ben install_name_tool ile değiştirmek için bir bash komut dosyası çalıştırın ama LC_ID_DYLIBbu yüzden usr / loca / opt bir symlink yapmak gerek yok! anlamanın bir yolu var mı? : |
Acı

85

Bu benim için çalıştı:

brew upgrade node

7
Bu ne yapıyor?
diegoaguilar

3
@diegoaguilar Bu nodehomebrew kullanarak yeniden yükleniyor . Muhtemelen başka bir kurulum düğüm yolunu bozdu. Benim için de çalıştı.
Hugo Nogueira

69

Mac OS'yi Mojave'ye yükselttikten sonra. yarnKomut ile npm modülleri yüklemeye çalıştım.

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

İle düzeltildi:

brew update
brew upgrade

2
IntelliJ yakın zamanda xcode güncellediğimde bu hatayı atmaya başladı. Intellij aracılığıyla bir node.js sunucusu çalıştırmaya çalışıyordum. Neyin yanlış gittiğinden emin değildim. node --versionSistemimde çalıştırmak da aynı hatayla sonuçlandı. Yukarıdaki iki komutu çalıştırmak sorunumu çözdü.
İşhan

3
Benim durumumda, brew cleanupeski sürümlerden kurtulmak istiyorsanız zaman zaman yapmak iyi olan komutu da çalıştırdım .
Michael Behrens

@ MichaelBehrens'in yorumuna gelince, koştum brew cleanupve düzelttim.
Buraco

37

Bazıları için bu, dinamik kütüphaneler için sistem yolunu ayarlamak kadar kolay olabilir. OS X'te bu, DYLD_LIBRARY_PATHortam değişkenini ayarlamak kadar basittir . Görmek:

Mac OS X'te DYLD_LIBRARY_PATH kullanmak doğru mudur? Ve bununla birlikte dinamik kütüphane arama algoritması nedir?


Aptalca gelebilir, ama merak ediyorum hangi değere ayarlamalıyım DYLD_LIBRARY_PATH?
Caesar

1
@Caesar Bağlamaya çalıştığınız dylibs'lerin bulunduğu dizine ayarlayın.
markshiz

Kullanıcılarınızın değişmesini bekleyemezsiniz DYLD_LIBRARY_PATH. Doğru çözüm, ile standart olmayan kütüphaneleri dahil etmektir .appve kullanıcının hiçbir şey yapması gerekmez. Ancak geliştirici yine de cevabım gereği yükleyici yolunu kesmek zorunda kalabilir.
trojanfoe

12

Ben rvm kullanarak ruby ​​2.3.1 yüklemeye çalışırken bu hatayı aldım. Önce çalışmamı söyledi brew update, ben de yaptım ve sonra çalışmayı denediğimde rvm install ruby-2.3.1bu SO sorusunda hatayı aldım.

Düzeltme ilk çalışacaktı brew upgrade, görünüşe göre bu superuser.com sorusuna göre hem brew update&& brew upgrade. Bu yapıldıktan sonra, sonunda yakut 2.3.1'i yükleyebilirim.


İnsanların brew upgradeböyle yapmalarını tavsiye etmeyi bırakmaları gerekir . Bu, kişinin tüm sistemi için büyük bir yıkıcı olabilir. Bunun yerine, nelerin yükseltilmesi gerektiğini yalıtın ve yalnızca bunu yükseltin.
Jivan

7

Sen kullanabilirsiniz otool yürütülebilir olmasını bu kütüphaneleri bekliyor nereye gösterecektir yürütülebilir için -L seçeneği ile komut.

Bunların yolunun değiştirilmesi gerekiyorsa , kitaplıkların yolunu ayarlamanıza izin veren install_name_tool komutunu kullanın .


7

Xcode artık IDE'lerini yükselttiğine göre, bu işlevlerini biraz değiştirdi.

Yukarıda gösterildiği gibi 'Gömülü İkili Dosyalar' ve 'Bağlantılı Çerçeveler ve Kütüphaneler' ayrı bölümler olarak ayrı bölümlere ayrılmıştır.

Şimdi, neyin gömülmesi gerektiğine dair sağda açılanlar içeren birleştirilmiş bir bölümdür.

Yeni IDE Değişiklikleri

Bu ilk başta benim için kafa karıştırıcıydı, ama şimdi mükemmel bir anlam ifade ediyor.


5

Buraya CMake kullanarak derlediğim bir programı çalıştırmaya çalıştım. Çalıştırmaya çalıştığımda şöyle diyor:

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

CMake'e dinamik olanı kullanmasını sağlamak yerine Boost'un statik sürümünü kullanmasını söyleyen sorunu atladım:

set(Boost_USE_STATIC_LIBS ON)

5

Xcode 11 ve sonrasında kullanıyorsanız:

Git Generalsekmesi ve içinde bir çerçeve eklemek Frameworks, Libraries, and Embedded Contentbölümünde.

Önemli: Varsayılan olarak olarak işaretlenebilir Do Not Embed, Embed Without Signingresimde gösterildiği gibi değiştirin ve hazırsınız.

resim açıklamasını buraya girin

11'in altındaki Xcode sürümleri için:

Sadece çerçeveyi Embedded Binariesbölüme ekleyin ve işiniz bitti.

Şerefe!


5

Macbook Catalina 10.15.4'ümdeki aşağıdaki hatayı gidermek için:

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

Aşağıdaki komutu çalıştırdım ve yukarıdaki sorunu çözdüm:

brew switch openssl 1.0.2s

3

Yeni bir temiz yapı, gerçekten garip kılan Product > Clean Build Folder( CommandShiftK) kullanarak bu sorunu çözdüm.


2

sudo install_name_tool -changeDeğişiklik dylib yolunu kullanabilirsiniz Ve sudo install_name_tool -iddylib adını değiştirebilirsiniz



2

Cmake kullanıyorsanız, DYLIB_INSTALL_NAME_BASE "@rpath"hedef özelliklere ekleyin :

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

veya Xcode dinamik kütüphane projesinde Hedef -> Yapı Ayarı ayarlamak Dinamik Kütüphane Adı Base Install için @rpath


Bir kakao çerçevesi dinamik kütüphane projesi oluşturuyorum, işe yarıyor ve kötü cmake tarafından üretilen projemle karşılaştırıldığında bunu farklı buluyorum ve düzelttim, iOS'ta çalışıyor.
cn00

2

virtualenv kullanıyorsanız, ortamınızın klasörünü kaldırın ve bu komutla yeniden oluşturun virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Xcode 6.3.1 kullanarak projelerine üçüncü taraf bir çerçeve bağlamaya çalışırken bu hatayı aldıkları için bu sayfaya gelen herkes için, karşılaştığım sorun kütüphanenin farklı bir sürüm kullanarak derleyicinin daha eski bir sürümüyle oluşturulmasıydı hızlı. Bunu benim için düzeltmenin tek yolu çerçeveyi yeniden inşa etmekti.

Bunu almanızın bir başka nedeni de bir Apple teknik belgesinde belirtilmiştir.

Swift kullanmayan ancak bunu yapan bir çerçeve gibi içerik yerleştiren bir uygulama oluşturuyorsanız, Xcode bu kitaplıkları uygulamanıza dahil etmez. Sonuç olarak, uygulamanız aşağıdaki gibi görünen bir hata mesajıyla başlatıldığında kilitlenir:

Katıştırılmış İçerik Hızlı Kod İçerir (EMBEDDED_CONTENT_CONTAINS_SWIFT) oluşturma ayarını uygulamanızda EVET olarak ayarlayın

İşte burada açıklayan tam Apple dokümanı bağlantısı


1

Benim çerçevem ​​için git alt modülü olarak eklenen bir Xcode alt projesini kullanıyordum.

Bu hatayı aldığımı düşünüyorum, çünkü çerçeveyi ana uygulamamdan farklı bir imza Ekibi ile imzalıyordum . (uygulama için değiştirilen ekipler; çerçeve için geçiş yapmayı unuttum)

Çözüm için değil çerçeve proje içinde imzalar. Bunun yerine, ana uygulamanın Target > General > Frameworks, Libraries, and Embedded Contentbölümünde çerçeveyi imzalayın Embed & Sign.

Seçersem Do not Embedveya Embed Without Signingbunun yerine hatayı alırsam:

FRAMEWORK , Kütüphane Doğrulaması kullanan süreçte kullanım için geçerli değil: eşlenen dosyanın cdhash'ı yok, imzasız mı? Kod en azından geçici olarak imzalanmalıdır.


1

Xcode 11.1 ve Swift 5.1

Hızlı düzeltme

Öncelikle, Harici Eklenen kitaplığın seçenek gömme seçeneğinin Genel Sekme, İkili Gömme'de seçili olduğundan emin olun.

Hala çalışmıyorsa ..

Bunun nedeni, kitaplıkların farklı, benzersiz sürümlerinin bulunmasıdır.

Bölmeleri Güncelleyin

pod update

Önemli: Tüm kitaplıkların Yapı Ayarları -> kitaplıklar ve çerçeveler listesine dahil edildiğinden ve yapıya gömme seçeneği verdiğinizden emin olun

Sadece harika çalışıyor


0

Aynı şeyi farklı bir kütüphane veya pakette yaşayan herkes için @ user3835452 doğru yolda. Bu mesajı çalıştırmaya çalışırken buldum 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

Birçok farklı yolu denedikten sonra koştum brew install openldapve düzeltti. Zaten koştuğumu brew updateve brew upgradeancak manuel olarak yükledikten sonra openldapgerçekten işe yaradığını unutmayın.


0

Homebrew'u yeniden yükleyerek bunu düzelttim

Kaldırma

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

Yüklemek

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


0

Bunu düzeltmenin kolay bir yolu var mı?

Az önce kullandım brew upgrade <the tool>. Benim durumumda brew upgrade tmux.


0

Ben iş parçacığı SIGABRT hatası alıntı uygulama çökme sorunu karşı karşıya.Kaza genel bakış dyld kütüphane yüklü değil ve görüntü böyle bir şey bulunamadı.

Bu, Xcode 9.3'te görüldü. Ben öğrendim nedeni Xcode kütüphaneleri dinamik olarak almak değil bu yüzden benim çökme sorununu çözdü elle yapmak zorundaydı.

Aşağıdaki adımları izleyin:

  1. Yapı Aşamalarına Git
  2. Üst taraftaki '+' düğmesine basın ve "Yeni Kopyalama Dosya Fazını" seçin
  3. Hedef'i Çerçeveler olarak seçin ve dosya eklemek için aşağıdaki '+' düğmesine basın.
  4. Aşağıdaki Diğer Ekle'yi seçin, CMD + SHIFT + G'yi tıklayın ve aşağıdaki yolu yapıştırın, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Şimdi bazı hızlı dylibs görebilirsiniz, .dylib uzantılı tüm hızlı kütüphaneleri seçin ve açmak tıklayın.

Bunlar uygulamanın genel sekmesindeki katıştırılmış ikili dosyalara eklenecektir.

Proje klasöründe yeni bir grup oluşturun ve tüm bu kütüphaneleri ekleyin.

Şimdi uygulamanızı çalıştırın.


0

Terminalde Conda ortamını kullanıyorsanız, çözmek için samtools'u güncelleyin.

conda install -c bioconda samtools


0

En iyisi, ilk önce çıktısının ne olduğunu kontrol edin.

otool -L

Ve sonra yanlışsa aşağıdakileri yapın

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

Ve

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"

0

bu sorunu çözmeli

brew update
brew upgrade
brew cleanup

1
Lütfen cevabınıza başkalarının ondan öğrenebilecekleri bir açıklama ekleyin
Nico Haase

-1

Yukarıdakilerin hiçbiri benim için işe brew reinstall icu4cyaramadı , ama işe yaradı .


-1

Hala bu sorunu yaşayan herkes için:

Bu Apple tarafında devam eden bir sorundur ve benim için işe yarayan şey ios 13.4'e (beta) yükseltmektir. Bunu yükledim ve bir cazibe gibi çalıştı.


bu IOS sorunu değil.
JBarros35
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.