dyld: Thư viện không được tải lên Lý do: Không tìm thấy hình ảnh


293

Khi cố chạy một tệp thực thi tôi đã được gửi trong Mac OS X, tôi gặp lỗi sau

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

Tôi đã cài đặt các thư viện boost và chúng được đặt trong /opt/local/lib. Tôi nghĩ rằng vấn đề có liên quan đến việc thực thi chỉ tìm trong thư mục như khi tôi dán 'libboost_atomic.dylib' vào đó, nó không còn bận tâm về nó nữa. Thật không may, sau đó nó phàn nàn rằng nó không thể tìm thấy thư viện boost tiếp theo.

Có một cách dễ dàng để khắc phục điều này?


Nếu bạn vẫn gặp sự cố, hãy sử dụng phương pháp từ chủ đề này
Tarik

Câu trả lời:


171

Tìm tất cả các thư viện 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)

và cho mỗi libboost_xxx.dylib, làm:

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

và cuối cùng xác minh bằng cách sử dụng otoollại:

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

Trang web: otool install_name_tool

EDIT Một thời gian trước tôi đã viết một kịch bản python ( copy_dylibs.py) để tự động xử lý tất cả những thứ này khi xây dựng một ứng dụng. Nó sẽ đóng gói tất cả các thư viện từ /usr/localhoặc /opt/localvào gói ứng dụng và sửa các tham chiếu đến các thư viện đó để sử dụng @rpath. Điều này có nghĩa là bạn có thể dễ dàng cài đặt thư viện của bên thứ ba bằng Homebrew và đóng gói chúng dễ dàng như vậy.

Bây giờ tôi đã công khai kịch bản này trên github .


4
@trojanfoe bạn có thể vui lòng giải thích ở đây exefile là gì một đường dẫn tập tin thực thi công cụ? phải không
VenushkaT

1
Sau khi biên dịch lại tệp thực thi, tôi phải lặp lại quá trình này - khá khó chịu trong quá trình phát triển.
17:54

2
Trên thực tế, cách tốt hơn là sử dụng DYLD_LIBRARY_PATHđể sửa đổi đường dẫn tìm kiếm. Câu trả lời khác đã có điều này.
frankliuao

18
'exefile': Không có tệp hoặc thư mục như vậy
ScottyBlades

2
@ScottyBlades exefilelà viết tắt của tệp thực thi mà bạn đang cố chạy. Trong trường hợp của tôi, otool -L /usr/local/bin/phpđã lừa
brunouno

106

Trong Generaltab của mục tiêu , có một phần được gọi làFrameworks, Libraries, and Embedded Content

Nhấp vào +dấu hiệu, thêm yêu cầu frameworkvà sự cố được giải quyết.

Cập nhật ảnh chụp màn hình xcode mới nhất


2
tôi nên thêm cái gì có rất nhiều tập tin
Joe Sleiman

@Himanshu Tôi có libcppreset cho dự án của mình! nó có rất nhiều sự phụ thuộc từ boost và ... Tôi chạy tập lệnh bash để thay đổi chúng bằng install_name_tool nhưng đối với LC_ID_DYLIBtôi không cần phải tạo liên kết tượng trưng trong usr / loca / opt! Có cách nào để tìm ra? : | Thật đau đớn :(
Mo Farhand

85

Điều này làm việc cho tôi:

brew upgrade node

7
Điều này đang làm gì, mặc dù?
diegoaguilar

3
@diegoaguilar đây là cài đặt lại nodebằng homebrew. Có lẽ một cài đặt khác đã phá vỡ đường dẫn nút. Cũng làm việc cho tôi.
Hugo Nogueira

68

Sau khi nâng cấp Mac OS lên Mojave. Tôi đã cố gắng cài đặt các mô-đun npm thông qua yarnlệnh Tôi gặp lỗi:

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

Đã được sửa với:

brew update
brew upgrade

2
IntelliJ của tôi bắt đầu ném lỗi này khi tôi cập nhật xcode gần đây. Tôi đã cố gắng chạy một máy chủ node.js thông qua intellij. Tôi không chắc chắn những gì đã sai. Chạy node --versiontrên hệ thống của tôi dẫn đến lỗi tương tự. Chạy hai lệnh trên đã giải quyết vấn đề của tôi.
Ishan

3
Trong trường hợp của tôi, tôi cũng chạy brew cleanuplệnh, điều này rất tốt để thực hiện nếu bạn muốn thoát khỏi các phiên bản cũ.
Michael Behlings

Liên quan đến nhận xét của @ MichaelBehren, tôi chạy brew cleanuprồi sửa.
Buraco

37

Đối với một số người, điều này có thể dễ dàng như thiết lập đường dẫn hệ thống cho các thư viện động. Trên OS X, điều này đơn giản như cài đặt DYLD_LIBRARY_PATHbiến môi trường. Xem:

Bạn có thể sử dụng DYLD_LIBRARY_PATH trên Mac OS X không? Và, thuật toán tìm kiếm thư viện động với nó là gì?


Nó có vẻ ngu ngốc, nhưng tôi tự hỏi tôi nên đặt giá trị DYLD_LIBRARY_PATHnào?
Caesar

1
@Caesar Đặt nó vào thư mục của bất cứ nơi nào các dylib bạn đang cố gắng liên kết được đặt.
markshiz

Bạn không thể mong đợi người dùng của bạn thay đổi DYLD_LIBRARY_PATH. Giải pháp chính xác là bao gồm các thư viện không chuẩn với .appvà người dùng sẽ không phải làm gì cả. Tuy nhiên, nhà phát triển vẫn có thể phải hack đường dẫn của trình tải theo câu trả lời của tôi.
trojanfoe

12

Tôi đã gặp lỗi này khi tôi cố gắng cài đặt ruby ​​2.3.1 bằng rvm. Đầu tiên nó bảo tôi chạy brew update, điều mà tôi đã làm, và sau đó khi tôi thử chạy rvm install ruby-2.3.1, tôi đã nhận được lỗi trong câu hỏi SO này.

Cách khắc phục là lần đầu tiên chạy brew upgrade, rõ ràng theo câu hỏi superuser.com này, bạn cần thực hiện cả brew update&& brew upgrade. Khi đã xong, cuối cùng tôi cũng có thể cài đặt ruby ​​2.3.1.


Mọi người cần ngừng đề nghị làm brew upgradenhư vậy. Đây có thể là một kẻ gây rối lớn cho toàn bộ hệ thống. Thay vào đó, cô lập những gì cần được nâng cấp và nâng cấp mà thôi.
Jivan

7

Bạn có thể sử dụng otool lệnh với tùy chọn -L cho tệp thực thi, sẽ hiển thị nơi thực thi đang mong đợi các thư viện đó.

Nếu đường dẫn đến những thứ cần thay đổi, hãy sử dụng lệnh install_name_tool , cho phép bạn đặt đường dẫn đến các thư viện.


7

Bây giờ Xcode đã nâng cấp IDE của họ, họ đã thay đổi một chút cách thức hoạt động của chức năng này.

Nó từng được chia thành các phần riêng biệt như được trình bày ở trên với 'Các nhị phân nhúng' và 'Các thư viện và khung liên kết' như các phần riêng biệt.

Bây giờ, nó là một phần kết hợp với thả xuống ở bên phải như những gì nên được nhúng.

Thay đổi IDE mới

Điều này lúc đầu thật khó hiểu với tôi, nhưng bây giờ có ý nghĩa hoàn hảo.


5

Tôi đến đây để cố gắng chạy một chương trình tôi vừa biên dịch bằng CMake. Khi tôi cố chạy nó, nó phàn nàn rằng:

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

Tôi đã khắc phục sự cố khi yêu cầu CMake sử dụng phiên bản Boost của tĩnh, thay vì để nó sử dụng phiên bản động:

set(Boost_USE_STATIC_LIBS ON)

5

Nếu bạn đang sử dụng Xcode 11 trở đi:

Chuyển đến Generaltab và thêm khung trong Frameworks, Libraries, and Embedded Contentphần.

Quan trọng: Theo mặc định, nó có thể được đánh dấu là Do Not Embed, thay đổi nó thành Embed Without Signingnhư hiển thị trong hình ảnh và bạn tốt để đi.

nhập mô tả hình ảnh ở đây

Đối với các phiên bản Xcode dưới 11:

Chỉ cần thêm khung trong Embedded Binaries phần và bạn đã hoàn thành.

Chúc mừng!


5

Để khắc phục lỗi bên dưới trên Macbook Catalina 10.15.4 của tôi:

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

Tôi đã chạy lệnh bên dưới và giải quyết vấn đề ở trên:

brew switch openssl 1.0.2s

3

Tôi đã khắc phục vấn đề này bằng cách sử dụng Product > Clean Build Folder( CommandShiftK), tạo ra một bản dựng sạch mới, thực sự kỳ quặc.


2

Bạn có thể sử dụng sudo install_name_tool -changethay đổi đường dẫn dylib và sudo install_name_tool -idthay đổi tên dylib



2

Nếu bạn sử dụng cmake, hãy thêm DYLIB_INSTALL_NAME_BASE "@rpath"vào thuộc tính đích:

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

hoặc trong dự án thư viện động Xcode Mục tiêu -> Cài đặt cài đặt Đặt thư viện động Cài đặt tên cơ sở thành @rpath


Tôi tạo một dự án thư viện động khung ca cao, nó hoạt động và so với dự án tạo cmake xấu của tôi thấy điều này khác biệt và đã sửa nó, nó hoạt động trên iOS.
cn00

2

Nếu bạn sử dụng virtualenv, chỉ cần xóa thư mục môi trường của bạn và tạo lại nó bằng lệnh này virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Đối với bất kỳ ai đến trang này vì họ gặp lỗi này khi cố liên kết khung bên thứ ba với dự án của họ bằng Xcode 6.3.1, vấn đề tôi gặp phải là do thư viện được tạo bằng phiên bản cũ hơn của trình biên dịch sử dụng phiên bản khác của nhanh chóng. Cách duy nhất để khắc phục điều này đối với tôi là xây dựng lại khung.

Một lý do khác mà bạn có thể nhận được điều này được nêu trong tài liệu kỹ thuật của Apple ..

Nếu bạn đang xây dựng một ứng dụng không sử dụng Swift nhưng nhúng nội dung như khung, Xcode sẽ không bao gồm các thư viện này trong ứng dụng của bạn. Do đó, ứng dụng của bạn sẽ gặp sự cố khi khởi chạy với thông báo lỗi như sau:

đặt cài đặt xây dựng Nội dung được nhúng chứa Mã Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT) thành CÓ trong ứng dụng của bạn

Đây là liên kết đến tài liệu đầy đủ của Apple giải thích nó ở đây


1

Đối với khung của tôi, tôi đã sử dụng một tiểu dự án Xcode được thêm dưới dạng một mô hình con git.

Tôi tin rằng tôi đã gặp phải lỗi này vì tôi đã ký khung với Nhóm ký khác với ứng dụng chính của tôi. (chuyển nhóm cho ứng dụng; quên chuyển đổi khung)

Giải pháp là không ký trong dự án khung. Thay vào đó, trong phần của ứng dụng chính Target > General > Frameworks, Libraries, and Embedded Content, hãy ký khung thông qua Embed & Sign.

Nếu tôi chọn Do not Embedhoặc Embed Without Signingthay vào đó tôi nhận được lỗi:

FRAMEWORK không hợp lệ để sử dụng trong quá trình sử dụng Xác thực thư viện: tệp được ánh xạ không có cdhash, hoàn toàn không dấu? Mã phải được ký ít nhất là ad-hoc.


1

Xcode 11.1 & Swift 5.1

Khắc phục nhanh

Trước tiên, hãy đảm bảo rằng thư viện được thêm bên ngoài có tùy chọn nhúng được chọn trong Tab Chung, Các tệp nhị phân được nhúng.

Nếu vẫn không hoạt động ..

Điều này xảy ra bởi vì bạn có các phiên bản thư viện khác nhau, chưa từng có.

Cập nhật Pods

pod update

Quan trọng: Kiểm tra tất cả các thư viện được bao gồm trong Cài đặt bản dựng -> danh sách thư viện và khung và bạn đã cung cấp tùy chọn để tham gia vào bản dựng

Chỉ làm việc tuyệt vời


0

Đối với bất kỳ ai gặp phải điều tương tự với thư viện hoặc gói khác, @ user3835452 đang đi đúng hướng. Tôi tìm thấy thông báo này trong khi cố gắng chạy 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

Sau khi thử rất nhiều cách khác nhau, tôi mới chạy brew install openldapvà sửa nó. Lưu ý rằng tôi đã chạy brew updatebrew upgradechỉ sau khi tôi cài đặt thủ công openldapthì nó mới thực sự hoạt động.


0

Tôi đã sửa lỗi này bằng cách cài đặt lại Homebrew

Gỡ cài đặt

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

Tải về

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


0

Có một cách dễ dàng để khắc phục điều này?

Tôi vừa mới sử dụng brew upgrade <the tool>. Trong trường hợp của tôi , brew upgrade tmux.


0

Tôi đã phải đối mặt với sự cố ứng dụng khi trích dẫn lỗi SIGABRT trong luồng. Tổng quan về sự cố là thư viện dyld không được tải và hình ảnh không được tìm thấy như thế.

Điều này đã được nhìn thấy trong Xcode 9.3. Lý do tôi phát hiện ra là Xcode không tự động chọn các thư viện nên tôi phải làm thủ công để giải quyết vấn đề sự cố của tôi.

Thực hiện theo các bước dưới đây:

  1. Chuyển đến giai đoạn xây dựng
  2. Nhấn nút '+' ở trên cùng và chọn "Giai đoạn sao chép tệp mới"
  3. Chọn Đích là Khung và Nhấn nút '+' bên dưới để thêm tệp.
  4. Chọn Thêm khác ở bên dưới, nhấp vào CMD + SHIFT + G và dán đường dẫn bên dưới, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Bây giờ bạn sẽ có thể thấy một số dylib swift, Chọn tất cả các thư viện swift với phần mở rộng .dylib và nhấp vào mở.

Chúng sẽ được thêm vào các nhị phân nhúng trong tab chung của ứng dụng.

Tạo một nhóm mới trong thư mục dự án và thêm tất cả các thư viện này.

Bây giờ chạy ứng dụng của bạn.


0

Nếu bạn đang sử dụng môi trường Conda trong thiết bị đầu cuối, hãy cập nhật các samtools để giải quyết nó.

conda cài đặt -c bioconda samtools


0

Tốt nhất được trả lời ở trên đầu tiên kiểm tra đầu ra của

otool -L

Và sau đó làm như sau nếu không chính xác

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

Không ai ở trên làm việc cho tôi, nhưng brew reinstall icu4cđã làm.


-1

Đối với bất cứ ai vẫn có thể gặp vấn đề này:

Đây là một vấn đề đang diễn ra ở phía Apple và điều làm việc với tôi là nâng cấp lên ios 13.4 (beta). Cài đặt nó và làm việc như một lá bùa.


Đây không phải là vấn đề iOS.
JBarros35
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.