dyld: लाइब्रेरी लोड नहीं हुई ... कारण: छवि नहीं मिली


294

मैक ओएस एक्स में भेजे गए निष्पादन योग्य को चलाने की कोशिश करते समय, मुझे निम्न त्रुटि मिलती है

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' को वहां पेस्ट करता हूं, इसके बारे में कोई चिंता नहीं करता है। दुर्भाग्य से फिर यह शिकायत करता है कि यह अगले बढ़ावा पुस्तकालय नहीं मिल सकता है।

क्या इसे ठीक करने का एक आसान तरीका है?


यदि आपके पास अभी भी इस विषय
तारिक

जवाबों:


171

सभी बढ़ावा पुस्तकालयों का पता लगाएं:

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

manpages: otool install_name_tool

EDIT A कुछ समय पहले मैंने copy_dylibs.pyएक ऐप बनाते समय इस सारे सामान को अपने आप काम करने के लिए एक पायथन स्क्रिप्ट ( ) लिखी थी । यह सभी लाइब्रेरीज़ को ऐप बंडल से /usr/localया उसके साथ पैकेज करेगा /opt/localऔर उपयोग करने के लिए उन लाइब्रेरीज़ का संदर्भ तय करेगा @rpath। इसका मतलब है कि आप Homebrew का उपयोग करके आसानी से थर्ड-पार्टी लाइब्रेरी स्थापित कर सकते हैं और उन्हें आसानी से पैकेज कर सकते हैं।

मैंने अब इस स्क्रिप्ट को जीथब पर सार्वजनिक कर दिया है ।


4
@trojanfoe क्या आप यहां बता सकते हैं कि निर्वासन क्या है यह एक उपकरण निष्पादन फ़ाइल पथ है? यह नहीं है?
वेनुष्काट 5

1
निष्पादन योग्य को पुनः प्राप्त करने के बाद मुझे इस प्रक्रिया को दोहराना होगा - विकास के दौरान काफी कष्टप्रद।
tglas

2
वास्तव में DYLD_LIBRARY_PATHखोज पथ को संशोधित करने के लिए उपयोग करने के लिए बेहतर तरीका है । दूसरे जवाब को यह मिल गया है।
फ्रैंकलीआओ

18
'निर्वासन': ऐसी कोई फाइल या निर्देशिका नहीं
स्कॉटीब्लैड्स

2
@ScottyBlades exefileउस निष्पादन योग्य फ़ाइल के लिए खड़ा है जिसे आप चलाने का प्रयास कर रहे हैं। मेरे मामले में, otool -L /usr/local/bin/phpचाल चली।
ब्रुनेनो

106

लक्ष्य के Generalटैब में, एक अनुभाग है जिसे कहा जाता हैFrameworks, Libraries, and Embedded Content

+साइन पर क्लिक करें, आवश्यक जोड़ें frameworkऔर दुर्घटना हल हो गई है।

नवीनतम एक्सकोड स्क्रीन-शॉट अपडेट करें


2
मुझे क्या जोड़ना चाहिए? बहुत सारी फाइलें हैं
जो स्लीमन

@ हिमांशु मेरे पास मेरी परियोजना के लिए libcppreset है! इसे बढ़ावा देने से बहुत अधिक निर्भरता है और ... मैं उन्हें install_name_tool के साथ बदलने के लिए एक bash स्क्रिप्ट चलाता हूं, लेकिन इसके लिए LC_ID_DYLIBहमें usr / loca / opt में सिमलिंक बनाने की आवश्यकता नहीं हो सकती है! क्या इसका कोई तरीका है? : | यह
पीड़ादायक है

85

यह मेरे लिए काम किया:

brew upgrade node

7
हालांकि यह क्या कर रहा है?
डाईगोएगिलर

3
@diegoaguilar यह nodehomebrew का उपयोग करके पुन: स्थापित कर रहा है। संभवतः एक और स्थापना ने नोड पथ को तोड़ दिया। मेरे लिए भी काम किया।
ह्यूगो

69

मैक ओएस को 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 --versionमेरे सिस्टम पर चलने से वही त्रुटि हुई। उपरोक्त दो आदेशों को चलाने से मेरी समस्या हल हो गई।
इशान

3
मेरे मामले में, मैंने brew cleanupकमांड भी चलाया , जो कई बार करना अच्छा होता है यदि आप पुराने संस्करणों से छुटकारा पाना चाहते हैं।
माइकल बेहरेंस

@ माइकलबेहरेंस की टिप्पणी के बारे में, मैं चला brew cleanupतो यह तय हो गया।
बुरको

37

कुछ के लिए, यह गतिशील पुस्तकालयों के लिए सिस्टम पथ सेट करने जितना आसान हो सकता है। ओएस एक्स पर, यह DYLD_LIBRARY_PATHपर्यावरण चर को सेट करने के रूप में सरल है । देख:

क्या मैक ओएस एक्स पर DYLD_LIBRARY_PATH का उपयोग करना ठीक है? और, इसके साथ गतिशील पुस्तकालय खोज एल्गोरिथ्म क्या है?


यह बेवकूफ लग सकता है, लेकिन मुझे आश्चर्य है कि मुझे किस मूल्य पर सेट करना चाहिए DYLD_LIBRARY_PATH?
सीज़र

1
@ कैसर जहां भी लिंक करने की कोशिश कर रहे हैं वहां स्थित निर्देशिका में इसे सेट करें।
मार्कशीट

आप अपने उपयोगकर्ताओं को बदलने की उम्मीद नहीं कर सकते DYLD_LIBRARY_PATH। सही समाधान के साथ गैर-मानक पुस्तकालयों को शामिल करना है .appऔर उपयोगकर्ता को कुछ भी करने की आवश्यकता नहीं होगी। हालाँकि, डेवलपर को अभी भी मेरे उत्तर के अनुसार लोडर पथ को हैक करना पड़ सकता है।
ट्रोजनफॉई

12

मुझे यह त्रुटि तब मिली जब मैंने rvm का उपयोग करके रूबी 2.3.1 को स्थापित करने का प्रयास किया। इसने मुझे पहले चलाने के लिए कहा brew update, जो मैंने किया, और फिर जब मैंने दौड़ने की कोशिश कीrvm install ruby-2.3.1 , तो मुझे इस SO प्रश्न में त्रुटि मिली।

पहले इसे ठीक करने के लिए तय किया गया था brew upgrade, जाहिरा तौर पर इस superuser.com सवाल के अनुसार आपको दोनों brew update&& करने की आवश्यकता है brew upgrade। एक बार जो किया गया था, मैं अंत में रूबी 2.3.1 स्थापित कर सकता था।


लोगों को ऐसा करने की सिफारिश करने से रोकने की जरूरत brew upgradeहै। यह किसी की संपूर्ण प्रणाली के लिए एक बड़ा व्यवधान हो सकता है। इसके बजाय, अलग-थलग करने की आवश्यकता है जो अपग्रेड करें और केवल उसी को अपग्रेड करें।
जीवन

7

आप ओटूल का उपयोग कर सकते हैं निष्पादन योग्य के लिए -L विकल्प के साथ कमांड का , जो प्रदर्शित करेगा कि निष्पादन योग्य उन पुस्तकालयों के होने की उम्मीद कर रहा है।

यदि उन पथ को बदलने की आवश्यकता है, तो install_name_tool कमांड का उपयोग करें , जो आपको पुस्तकालयों के लिए पथ सेट करने की अनुमति देता है।


7

अब जब Xcode ने अपनी IDE को अपग्रेड किया है, तो वे थोड़ा बदल गए हैं कि यह कैसे कार्य करता है।

इसे अलग-अलग खंडों में विभाजित किया जाता था, जैसा कि ऊपर दिए गए 'एंबेडेड बायनेरिज़' और 'लिंक्ड फ़्रेमवर्क और लाइब्रेरीज़' के साथ अलग-अलग वर्गों के रूप में प्रदर्शित किया जाता है।

अब, यह दाईं ओर ड्रॉप-डाउन के साथ एक संयुक्त खंड है जैसा कि एम्बेड किया जाना चाहिए।

नया आईडीई परिवर्तन

यह मुझे पहली बार में भ्रमित कर रहा था, लेकिन अब सही समझ में आता है।


5

मैं यहां एक कार्यक्रम चलाने की कोशिश कर रहा था जिसे मैंने केवल सीमेक का उपयोग करके संकलित किया। जब मैं इसे चलाने की कोशिश करता हूं, तो यह कहती है:

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

मैंने सीएमके को बूस्ट के स्थिर संस्करण का उपयोग करने के बारे में बताने की समस्या को दरकिनार कर दिया, बजाय इसके कि डायनेमिक का उपयोग करने के बजाय:

set(Boost_USE_STATIC_LIBS ON)

5

यदि आप Xcode 11 का उपयोग कर रहे हैं:

Generalटैब पर जाएं और Frameworks, Libraries, and Embedded Contentअनुभाग में रूपरेखा जोड़ें ।

महत्वपूर्ण: डिफ़ॉल्ट रूप से इसे चिह्नित किया जा सकता है, Do Not Embedइसे Embed Without Signingछवि में दिखाए गए अनुसार बदलना और आप जाना अच्छा है।

यहां छवि विवरण दर्ज करें

11 से नीचे के Xcode संस्करणों के लिए:

बस Embedded Binariesअनुभाग में रूपरेखा जोड़ें और आप कर रहे हैं।

चीयर्स!


5

मेरी मैकबुक कैटालिना 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 Folder( CommandShiftK), जो एक नया साफ निर्माण करता है, वास्तव में अजीब है।


2

आप sudo install_name_tool -changeपरिवर्तन dylib पथ का उपयोग कर सकते हैं और sudo install_name_tool -iddylib नाम बदल सकते हैं



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


मैं एक कोको फ्रेमवर्क डायनेमिक लाइब्रेरी प्रोजेक्ट बनाता हूं, यह काम करता है, और मेरी खराब सीमैके जनरेट प्रोजेक्ट के साथ तुलना करने पर यह अलग लगता है, और इसे ठीक किया गया, यह आईओएस पर काम करता है।
cn00

2

यदि आप virtualenv का उपयोग करते हैं तो बस अपने वातावरण के फ़ोल्डर को हटा दें और इसे इस कमांड के साथ फिर से बनाएँ virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

इस पृष्ठ पर आने वाले किसी भी व्यक्ति के लिए क्योंकि उन्हें यह त्रुटि Xcode 6.3.1 का उपयोग करके अपने प्रोजेक्ट में किसी तीसरे पक्ष के ढांचे को जोड़ने की कोशिश में मिली थी, जिस समस्या से मैं भागा था, क्योंकि एक अलग संस्करण का उपयोग करके संकलक के पुराने संस्करण के साथ पुस्तकालय बनाया जा रहा था तेज करने के लिए। मेरे लिए इसे ठीक करने का एकमात्र तरीका फ्रेमवर्क को फिर से बनाना था।

एक और कारण जो आपको मिल सकता है वह है Apple तकनीकी डॉक में कहा गया है।

यदि आप एक ऐसा ऐप बना रहे हैं जो स्विफ्ट का उपयोग नहीं करता है, लेकिन एक फ्रेमवर्क जैसी सामग्री एम्बेड करता है, तो 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मुझे त्रुटि मिलती है:

रूपरेखा मान्य नहीं लाइब्रेरी मान्यता का उपयोग कर प्रक्रिया में इस्तेमाल के लिए: मैप किए गए फ़ाइल नहीं cdhash, पूरी तरह से अहस्ताक्षरित है? कोड पर कम से कम तदर्थ हस्ताक्षर किए जाने चाहिए।


1

Xcode 11.1 और स्विफ्ट 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 त्रुटि के हवाले से ऐप क्रैश इश्यू का सामना करना पड़ा। क्रैश का सबब लोडेड लाइब्रेरी नहीं है और इमेज में ऐसा कुछ नहीं मिला है।

यह Xcode 9.3 में देखा गया था। इसका कारण मुझे पता चला कि Xcode गतिशील रूप से पुस्तकालयों को नहीं उठा रहा है, इसलिए मुझे इसे मैन्युअल रूप से करना पड़ा जिससे मेरी क्रैश समस्या हल हो गई।

नीचे दिए गए चरणों का पालन करें:

  1. निर्माण चरणों पर जाएं
  2. शीर्ष पर '+' बटन दबाएं और "नई प्रतिलिपि फ़ाइल चरण" चुनें
  3. गंतव्य को चौखटे के रूप में चुनें और फ़ाइलों को जोड़ने के लिए नीचे '+' बटन दबाएं।
  4. नीचे अन्य जोड़ें का चयन करें, CMD + SHIFT + G पर क्लिक करें और नीचे का पथ पेस्ट करें, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

अब आप कुछ स्विफ्ट डाइलिब्स देख पाएंगे, .dylib एक्सटेंशन वाली सभी स्विफ्ट लाइब्रेरियों को सेलेक्ट करें और ओपन पर क्लिक करें।

ये ऐप के सामान्य टैब में एम्बेडेड बायनेरिज़ में जुड़ जाएंगे।

प्रोजेक्ट फ़ोल्डर में एक नया समूह बनाएं और इन सभी पुस्तकालयों को जोड़ें।

अब अपना ऐप चलाएं।


0

यदि आप टर्मिनल में Conda पर्यावरण का उपयोग कर रहे हैं, तो इसे हल करने के लिए samtools को अपडेट करें।

conda install -c bioconda samtools


0

सबसे पहले उत्तर दिया जाता है कि पहले जाँच करें कि इसका आउटपुट क्या है

ओटूल-एल

और फिर गलत होने पर निम्न कार्य करें

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"

0

इस मुद्दे को ठीक करना चाहिए

brew update
brew upgrade
brew cleanup

1
कृपया अपने उत्तर में कुछ स्पष्टीकरण जोड़ें जैसे कि अन्य लोग इससे सीख सकते हैं
निको हसे


-1

किसी के लिए जो अभी भी यह समस्या हो सकती है:

यह Apple की तरफ से एक समस्या है, और जो मेरे लिए काम कर रहा है वह ios 13.4 (बीटा) में अपग्रेड हो रहा है। स्थापित किया और एक आकर्षण की तरह काम किया।


यह IOS मुद्दा नहीं है।
JBarros35
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.