2014-09-07 2 views
0

내 응용 프로그램에 Google Breakpad (일부 외부 프레임 워크) 지원을 추가하려고합니다.OS X dlopen이 프레임 워크를 찾을 수 없습니다 - 이미지를 찾을 수 없음

(char *) error = 0x0000000100200175 "dlopen(/Users/user/MyApp.app/Contents/MacOS/MyApp, 1): 
Library not loaded: @executable_path/../Frameworks/Breakpad.framework/Versions/A/Breakpad\n 
Referenced from: /Users/user/MyApp.app/Contents/MacOS/MyApp\n 
Reason: image not found" 

내가 확인하고 Breakpad 파일이 실제로합니다 (MyApp를 파일로) 상대 경로에 존재 : 나는 필요한 모든 단계를 완료했다,하지만 난 내 응용 프로그램이 dlopen을 사용하여로드하려고 할 때,이 오류가 발생합니다 .

여기에 MyApp를 파일에 otool -L합니다 (@executable_path 통지)입니다 :

Users-Mac:MacOS user$ otool -L MyApp 
MyApp: 
    /usr/lib/libcurl.4.dylib (compatibility version 6.0.0, current version 6.1.0) 
    /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8) 
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8) 
    /usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 9.6.0) 
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
    /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit (compatibility version 1.0.0, current version 1.0.0) 
    @executable_path/../Frameworks/Breakpad.framework/Versions/A/Breakpad (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 152.0.0) 
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0) 
    /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/CoreAudioKit.framework/Versions/A/CoreAudioKit (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI (compatibility version 1.0.0, current version 49.0.0) 
    /System/Library/Frameworks/DiscRecording.framework/Versions/A/DiscRecording (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) 
    /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore (compatibility version 1.2.0, current version 1.6.3) 
    /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit (compatibility version 1.0.0, current version 533.21.1) 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11) 
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.43.0) 
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.36.0) 
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 38.0.0) 
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0) 
    /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0) 
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.62.0) 

누구나 단서를 가지고?

+0

? 왜 그리고 어떻게 dlopen을 사용 했습니까? – Mark

+0

프레임 워크가 포함되어 있습니다. Frameworks 폴더와 프레임 워크에 복사하는 파일 복사 단계에 추가됩니다. 또한 /Contents/Frameworks/Breakpad.framework에서 찾을 수 있습니다. – Tsury

+0

내 응용 프로그램에로드하는 래퍼가 있기 때문에 dlopen을 사용하고 있습니다. – Tsury

답변

0

것은이 단계에 따라, 그것은 작동 할 수 있습니다

  1. 다음 빌드 단계
  2. 당신이 + 기호를 찾을 수이 페이지의
  3. 좌측 상단을 눌러이 기호를 누르면 대상로 이동 .
  4. 눌러 새로운 파일 복사는
  5. 다음 파일 복사을 확장 한 프레임 워크를 끌어이 섹션에서 드롭 단계을 구축 할 수 있습니다.
  6. 변경 대상에 프레임 워크

는 동적 라이브러리를 사용하여 OS X 10.6 용으로 컴파일 할 때이 문제였다 밝혀, 그것은

+0

이미 프레임 워크를 복사하기 위해 파일 복사 단계를 추가했다고 설명했습니다. – Tsury

0

잘 작동합니다 바랍니다. @executable_path는 동적로드 후에 업데이트되지 않으므로 LOADED 바이너리는 LOADING 바이너리와 관련된 종속성을 찾습니다.

내 프레임 워크, Breakpad를 다시 컴파일하고 @executable_path 대신 @loader_path를 사용했는데 이제는 정상적으로 작동합니다. 여기

상세 정보 : 당신은 MyApp를 구축하고 프레임 워크를 포함 얼마나 dylib @executable_path path issue in a plug-in bundle

관련 문제