dyld: ไม่ได้โหลดไลบรารี ... เหตุผล: ไม่พบรูปภาพ


294

เมื่อพยายามเรียกใช้ไฟล์ปฏิบัติการที่ฉันส่งไปใน 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

ค้นหาห้องสมุดเพิ่มทั้งหมด:

$ 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

แก้ไขสักครู่ฉันก็เขียนสคริปต์ไพ ธ อน ( copy_dylibs.py) เพื่อทำงานทั้งหมดนี้โดยอัตโนมัติเมื่อสร้างแอป มันจะแพคเกจค่าไลบรารีทั้งหมดจาก/usr/localหรือ/opt/localลง app @rpathมัดและแก้ไขปัญหาการอ้างอิงไปยังห้องสมุดเหล่านั้นไปใช้ ซึ่งหมายความว่าคุณสามารถติดตั้งไลบรารีบุคคลที่สามได้อย่างง่ายดายโดยใช้ Homebrew และจัดทำแพ็กเกจให้ง่าย

ฉันได้ทำในขณะนี้ประชาชนสคริปต์นี้บนGitHub


4
@trojanfoe คุณช่วยกรุณาอธิบายที่นี่ exefile มันคืออะไรไฟล์เส้นทางเครื่องมือ exec? ไม่ใช่เหรอ
VenushkaT

1
หลังจากรวบรวมไฟล์ปฏิบัติการใหม่ฉันต้องทำซ้ำกระบวนการนี้ - ค่อนข้างน่ารำคาญระหว่างการพัฒนา
tglas

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
ฉันควรจะเพิ่มอะไร มีไฟล์จำนวนมาก
โจ Sleiman

@Himanshu ฉันมี libcppreset สำหรับโครงการของฉัน! มันมีการพึ่งพามากจากการเพิ่มและ ... ฉันเรียกใช้สคริปต์ทุบตีเพื่อเปลี่ยนพวกเขาด้วย install_name_tool แต่สำหรับLC_ID_DYLIBฉันไม่สามารถที่จะทำให้ symlink ใน usr / loca / opt! มีวิธีคิดออกยังไง? : |
Painfull

85

สิ่งนี้ใช้ได้กับฉัน:

brew upgrade node

7
สิ่งนี้กำลังทำอะไรอยู่?
diegoaguilar

3
@diegoaguilar นี่ติดตั้งใหม่nodeโดยใช้ homebrew อาจเป็นเพราะการติดตั้งอื่นทำให้พา ธ ของโหนดพัง ทำงานให้ฉันด้วย
Hugo Nogueira

69

หลังจากอัปเกรด Mac OS เป็น Mojave ฉันพยายามติดตั้งโมดูล npm ผ่านyarnคำสั่งฉันพบข้อผิดพลาด:

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
intelliJ ของฉันเริ่มโยนข้อผิดพลาดนี้เมื่อฉันเพิ่งปรับปรุง xcode ฉันพยายามเรียกใช้เซิร์ฟเวอร์ node.js ผ่านทาง Intellij ฉันไม่แน่ใจว่าเกิดอะไรขึ้น ทำงานnode --versionบนระบบของฉันทำให้เกิดข้อผิดพลาดเดียวกัน การเรียกใช้สองคำสั่งด้านบนช่วยแก้ปัญหาของฉันได้
Ishan

3
ในกรณีของฉันฉันยังรันbrew cleanupคำสั่งซึ่งเป็นการดีที่จะทำในบางครั้งหากคุณต้องการกำจัดเวอร์ชันเก่า
Michael Behrens

เกี่ยวกับความคิดเห็นของ @ MichaelBehrens ฉันเรียกใช้ brew cleanupแล้วแก้ไข
Buraco

37

สำหรับบางคนสิ่งนี้อาจเป็นเรื่องง่ายเหมือนกับการตั้งค่าเส้นทางของระบบสำหรับไลบรารีแบบไดนามิก บน OS X นี่ง่ายเหมือนการตั้งค่าDYLD_LIBRARY_PATHตัวแปรสภาพแวดล้อม ดู:

ตกลงใช้ DYLD_LIBRARY_PATH บน Mac OS X หรือไม่ และอัลกอริธึมการค้นหาไลบรารีแบบไดนามิกคืออะไร


มันอาจดูโง่ แต่ฉันสงสัยว่าฉันควรตั้งค่าDYLD_LIBRARY_PATHอะไร?
Caesar

1
@Caesar ตั้งไว้ที่ไดเรกทอรีของทุก ๆ dylibs ที่คุณพยายามจะลิงค์อยู่
markshiz

DYLD_LIBRARY_PATHคุณไม่สามารถคาดหวังว่าผู้ใช้ของคุณจะเปลี่ยน ทางออกที่ถูกต้องคือการรวม.appไลบรารี่ที่ไม่ได้มาตรฐานเข้าด้วยกันและผู้ใช้จะไม่ต้องทำอะไรเลย อย่างไรก็ตามผู้พัฒนาอาจต้องแฮ็กเส้นทางโหลดตามคำตอบของฉัน
trojanfoe

12

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามติดตั้ง ruby ​​2.3.1 โดยใช้ rvm ก่อนอื่นบอกให้ฉันวิ่งbrew updateซึ่งฉันทำแล้วเมื่อฉันลองวิ่งrvm install ruby-2.3.1ฉันได้รับข้อผิดพลาดในคำถาม SO นี้

การแก้ไขคือการทำงานครั้งแรกbrew upgradeที่เห็นได้ชัดตามนี้superuser.comคำถามที่คุณต้องทำทั้ง&&brew update brew upgradeเมื่อเสร็จแล้วฉันก็สามารถติดตั้งทับทิม 2.3.1 ในที่สุด


ผู้คนจำเป็นต้องหยุดแนะนำให้ทำbrew upgradeเช่นนั้น นี่อาจเป็นตัวทำลายระบบขนาดใหญ่ของระบบทั้งหมด แยกสิ่งที่จำเป็นต้องได้รับการอัพเกรดและอัพเกรดเท่านั้น
Jivan

7

คุณสามารถใช้otoolคำสั่งพร้อมกับตัวเลือก -L สำหรับความสามารถในการเรียกใช้งานซึ่งจะแสดงตำแหน่งที่สามารถเรียกใช้งานได้ซึ่งต้องการให้ไลบรารีเหล่านั้นเป็น

หากพา ธ ไปยังสิ่งเหล่านั้นต้องการการเปลี่ยนแปลงให้ใช้คำสั่งinstall_name_toolซึ่งอนุญาตให้คุณตั้งค่าพา ธ ไปยังไลบรารี


7

ตอนนี้ Xcode ได้อัพเกรด IDE ของพวกเขาพวกเขาได้เปลี่ยนวิธีการใช้งานนี้เล็กน้อย

มันเคยถูกแยกออกเป็นส่วนต่าง ๆ ดังที่แสดงข้างต้นด้วย 'Embedded Binaries' และ 'Linked Frameworks and Libraries' เป็นส่วนแยก

ตอนนี้มันเป็นส่วนที่รวมเข้าด้วยกันโดยมีดรอปดาวน์ด้านขวาว่าควรฝังอะไร

การเปลี่ยนแปลง IDE ใหม่

ตอนแรกฉันรู้สึกสับสน แต่ตอนนี้ก็เหมาะสมแล้ว


5

ฉันมาที่นี่เพื่อพยายามเรียกใช้โปรแกรมที่ฉันเพิ่งคอมไพล์ด้วย CMake เมื่อฉันพยายามที่จะใช้มันก็บ่นว่า:

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

ฉันหลีกเลี่ยงปัญหาที่บอกให้ CMake ใช้ Boost เวอร์ชันคงที่แทนที่จะปล่อยให้มันใช้ Dynamic หนึ่ง:

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


2

คุณสามารถใช้sudo install_name_tool -changeเปลี่ยนเส้นทาง dylib และ 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 ปัญหาที่ฉันพบคือห้องสมุดกำลังถูกสร้างขึ้นด้วยคอมไพเลอร์เวอร์ชั่นเก่าโดยใช้เวอร์ชันอื่น ของรวดเร็ว วิธีเดียวที่จะแก้ไขปัญหานี้สำหรับฉันคือการสร้างกรอบงานอีกครั้ง

เหตุผลอื่นที่คุณอาจได้รับสิ่งนี้มีระบุไว้ในเอกสารทางเทคนิคของ Apple

หากคุณกำลังสร้างแอพที่ไม่ได้ใช้ Swift แต่รวมเนื้อหาเช่นเฟรมเวิร์กที่ใช้ Xcode จะไม่รวมไลบรารี่เหล่านี้ไว้ในแอพของคุณ ดังนั้นแอปของคุณจะทำงานล้มเหลวเมื่อเริ่มต้นด้วยข้อความแสดงข้อผิดพลาดดังนี้:

ตั้งค่าเนื้อหาฝังตัวที่มีรหัส Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT) การตั้งค่าการสร้างเป็น YES ในแอปของคุณ

นี่คือลิงค์ไปยังเอกสาร Apple ฉบับเต็มที่อธิบายไว้ที่นี่


1

สำหรับกรอบงานของฉันฉันกำลังใช้โครงการย่อย Xcode เพิ่มเป็น submodule git

ฉันเชื่อว่าฉันได้รับข้อผิดพลาดนี้เนื่องจากฉันกำลังเซ็นชื่อเฟรมเวิร์กกับทีมการเซ็นชื่ออื่นจากแอพหลักของฉัน (เปลี่ยนทีมสำหรับแอปแล้วลืมเปลี่ยนเป็นเฟรมเวิร์ก)

วิธีแก้ไขคือไม่ต้องลงชื่อในโครงการกรอบงาน แต่ในTarget > General > Frameworks, Libraries, and Embedded Contentส่วนของแอพหลักให้ลงนามกรอบงานEmbed & Signแทน

หากฉันเลือกDo not EmbedหรือEmbed Without Signingฉันได้รับข้อผิดพลาด:

กรอบไม่ถูกต้องสำหรับใช้ในกระบวนการโดยใช้การตรวจสอบความถูกต้องของห้องสมุด: ไฟล์ที่แมปไม่มี cdhash, ไม่ได้ลงชื่ออย่างสมบูรณ์? รหัสจะต้องมีการลงโฆษณาอย่างน้อย


1

Xcode 11.1 & Swift 5.1

แก้ไขด่วน

ขั้นแรกให้ตรวจสอบว่ามีการเพิ่มตัวเลือกไลบรารีภายนอกที่เพิ่มเข้ามาในแท็บทั่วไปแท็บแบบฝัง

หากยังไม่ได้ผล ..

สิ่งนี้เกิดขึ้นเพราะคุณมีไลบรารี่เวอร์ชันที่แตกต่างและไม่ตรงกัน

อัปเดตพ็อด

pod update

สำคัญ: ตรวจสอบว่าไลบรารีทั้งหมดถูกรวมอยู่ในรายการการตั้งค่า Build -> ไลบรารีและกรอบงานและคุณได้ให้ตัวเลือกเพื่อฝังในงานสร้าง

แค่ทำงานได้ยอดเยี่ยม


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. ไปที่ Build Phases
  2. กดปุ่ม '+' ที่ด้านบนและเลือก "New Copy File Phase"
  3. เลือก Destination as Frameworks และกดปุ่ม '+' ด้านล่างเพื่อเพิ่มไฟล์
  4. เลือกเพิ่มอื่น ๆ ที่ด้านล่างคลิก CMD + SHIFT + G และวางเส้นทางด้านล่าง /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

ตอนนี้คุณจะสามารถเห็นบางส่วนของ swift, เลือก swift libraries ทั้งหมดที่มีนามสกุล. dylib และคลิกที่ open

สิ่งเหล่านี้จะถูกเพิ่มไปยังไบนารีที่ฝังในแท็บทั่วไปของแอพ

สร้างกลุ่มใหม่ในโฟลเดอร์โครงการและเพิ่มไลบรารีเหล่านี้ทั้งหมด

ตอนนี้รันแอพของคุณ


0

หากคุณกำลังใช้สภาพแวดล้อม Conda ในเทอร์มินัลอัพเดต samtools เพื่อแก้ปัญหา

Conda ติดตั้ง -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"

0

สิ่งนี้ควรแก้ไขปัญหา

brew update
brew upgrade
brew cleanup

1
โปรดเพิ่มคำอธิบายลงในคำตอบของคุณเพื่อให้คนอื่นสามารถเรียนรู้จากมัน
Nico Haase


-1

สำหรับทุกคนที่อาจยังมีปัญหานี้อยู่:

นี่เป็นปัญหาต่อเนื่องทางฝั่งของ Apple และสิ่งที่ได้ผลสำหรับฉันคือการอัพเกรดเป็น iOS 13.4 (เบต้า) ติดตั้งและใช้งานได้อย่างมีเสน่ห์


นี่ไม่ใช่ปัญหาของ IOS
JBarros35
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.