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)

맨 페이지 : otool install_name_tool

다시 한 번 편집 나는 copy_dylibs.py앱을 만들 때이 모든 것을 자동으로 해결하기 위해 파이썬 스크립트 ( )를 썼습니다 . 앱 번들 에서 /usr/local또는 /opt/local앱 번들로 모든 라이브러리를 패키지하고 사용할 라이브러리에 대한 참조를 수정합니다 @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
무엇을 추가해야합니까? 많은 파일이 있습니다
Joe Sleiman

@Himanshu 프로젝트에 libcppreset이 있습니다! 그것은 boost와 많은 의존성을 가지고 있으며 ... install_name_tool로 그것들을 변경하기 위해 bash 스크립트를 실행하지만 LC_ID_DYLIBusr / loca / opt에서 symlink를 만들 필요는 없습니다! 알아낼 방법이 있습니까? : | 고통
스러워

85

이것은 나를 위해 일했다 :

brew upgrade node

7
그래도 뭐하는거야?
diegoaguilar

3
@diegoaguilar 이것은 nodehomebrew를 사용하여 다시 설치 합니다. 다른 설치에서 노드 경로가 손상되었을 수 있습니다. 또한 나를 위해 일했습니다.
Hugo Nogueira

69

Mac OS를 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.js 서버를 실행하려고했습니다. 나는 무엇이 잘못되었는지 확신하지 못했습니다. node --version내 시스템에서 실행 하면 같은 오류가 발생했습니다. 위의 두 명령을 실행하면 문제가 해결되었습니다.
Ishan

3
필자의 경우 brew cleanup이전 버전을 제거하려는 경우 때때로 수행하는 것이 좋습니다.
Michael Behrens

@MichaelBehrens의 의견과 관련하여 실행 brew cleanup한 다음 수정했습니다.
라코

37

일부의 경우 동적 라이브러리의 시스템 경로를 설정하는 것만 큼 쉽습니다. OS X에서 이것은 설정하는 것만 큼 간단합니다DYLD_LIBRARY_PATH 환경 변수 합니다. 보다:

Mac OS X에서 DYLD_LIBRARY_PATH를 사용해도 되나요? 동적 라이브러리 검색 알고리즘은 무엇입니까?


어리석은 것처럼 보이지만 어떤 가치를 설정해야하는지 궁금 DYLD_LIBRARY_PATH합니다.
Caesar

1
@Caesar 연결하려는 dylib가있는 디렉토리로 설정하십시오.
markshiz

사용자가 변경 될 것으로 기대할 수 없습니다 DYLD_LIBRARY_PATH. 올바른 해결책은 표준이 아닌 라이브러리를 포함 .app하는 것이며 사용자는 아무것도 할 필요가 없습니다. 그러나 개발자는 여전히 내 대답에 따라 로더 경로를 해킹해야 할 수도 있습니다.
trojanfoe 19

12

rvm을 사용하여 ruby ​​2.3.1을 설치하려고 할 때이 오류가 발생했습니다. 먼저 나에게 실행하도록 지시 brew update한 다음 달리기를 시도했을 rvm install ruby-2.3.1때이 SO 질문에 오류가 발생했습니다.

brew upgradesuperuser.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를 사용하도록하는 문제를 피했습니다.

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

내 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

3

Product > Clean Build Folder( CommandShiftK) 를 사용 하여이 문제를 해결하여 새로운 깔끔한 빌드를 만들었습니다.


2

sudo install_name_tool -changedylib 경로 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}"
    )

또는 엑스 코드 동적 라이브러리 프로젝트에서 대상 -> 빌드 설정은 설정 동적 라이브러리 이름 기본 설치@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는 이러한 라이브러리를 앱에 포함하지 않습니다. 결과적으로 다음과 같은 오류 메시지가 표시되면서 앱이 시작될 때 충돌이 발생합니다.

앱에서 임베디드 콘텐츠에 스위프트 코드 포함 (EMBEDDED_CONTENT_CONTAINS_SWIFT) 빌드 설정을 YES로 설정하십시오.

여기에 전체 애플 문서에 대한 링크가 있습니다.


1

내 프레임 워크에서는 git 하위 모듈로 추가 된 Xcode 하위 프로젝트를 사용하고있었습니다.

내 기본 앱 과 다른 서명 팀으로 프레임 워크에 서명했기 때문에이 오류가 발생했다고 생각 합니다. (앱으로 전환 한 팀, 프레임 워크로 전환하는 것을 잊었습니다)

해결책은 프레임 워크 프로젝트 내에 서명 하지 않는 것 입니다. 대신 기본 앱 Target > General > Frameworks, Libraries, and Embedded Content섹션에서 다음을 통해 프레임 워크에 서명하십시오.Embed & Sign .

선택 Do not Embed하거나 Embed Without Signing대신 오류가 발생합니다.

FRAMEWORK 라이브러리 유효성 검사를 사용하는 프로세스에서 사용할 수 없습니다. 매핑 된 파일에 cdhash가없고 완전히 서명되지 않았습니까? 코드는 임시 서명해야합니다.


1

Xcode 11.1 및 Swift 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. 상단의 '+'버튼을 누르고 "New Copy File Phase"를 선택하십시오.
  3. 대상을 프레임 워크로 선택하고 아래의 '+'단추를 눌러 파일을 추가하십시오.
  4. 아래에서 기타 추가를 선택하고 CMD + SHIFT + G를 클릭 한 다음 아래 경로를 붙여 넣으십시오. /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

이제 몇 가지 빠른 dylib를 볼 수 있습니다. 확장자가 .dylib 인 모든 빠른 라이브러리를 선택하고 열기를 클릭하십시오.

이들은 앱의 일반 탭에 포함 된 바이너리에 추가됩니다.

프로젝트 폴더에 새 그룹을 만들고이 라이브러리를 모두 추가하십시오.

이제 앱을 실행하십시오.


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"


-1

위의 어느 것도 나를 위해 일하지는 brew reinstall icu4c않았지만 그렇게했습니다.


-1

여전히이 문제가있는 사람은 다음을 수행하십시오.

이것은 애플 측에서 진행중인 문제이며, 나를 위해 일한 것은 iOS 13.4 (베타)로 업그레이드하는 것입니다. 그것을 설치하고 매력처럼 일했습니다.


이것은 IOS 문제가 아닙니다.
JBarros35
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.