2011-02-02 2 views
12

에서 검색 dylib를 유지 나의 오류 그게 전부 :엑스 코드가 잘못된 경로

dyld: Library not loaded: /usr/local/lib/libofa.0.dylib 
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test 
Reason: image not found 

을 좀 연구를하고 install_name_tool으로 dylib 내부의 경로를 변경했습니다 :

davids-macbook:Test david$ otool -L libofa.0.0.0.dylib 
libofa.0.0.0.dylib: 
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) 
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) 

그러나 엑스 코드가 검색 계속/usr/lib /에 :

build/Debug/Test.app/Contents/MacOS/Test: 
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0) 
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0) 
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) 
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0) 
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0) 
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0) 
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0) 
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0) 
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) 
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.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/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0) 
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0) 
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0) 

Xcode에서 이것을 설정할 방법이 있습니까 ??? 감사합니다

편집 : 도서관은 Xcode 프로젝트가 아닙니다. ./configure; 일반적으로 내가하는 일이있다

+0

Xcode는 링커가 아닙니다. –

+5

Xcode에게 링커에게 알리는 방법이 있습니까 ..? – david

답변

18

합니다 라이브러리의 설치 디렉토리를 설정

  1. @rpath에. 그러면 설치 이름이 @rpath/libofa.0.0.0.dylib으로 설정됩니다. 라이브러리를 직접 만들려면 Xcode에서이 라이브러리를 설정할 수 있습니다. 그렇지 않은 경우 install_name_tool을 사용하여 변경하십시오.
  2. 런 경로 검색 경로을 라이브러리를 사용하는 응용 프로그램의 경로가 라이브러리가있는 디렉터리의 위치로 설정하십시오. 앱의 프레임 워크 디렉토리에 라이브러리를 넣어 예를 들어, 당신은 @executable_path/../Frameworks (또는 @loader_path/../Frameworks)에 RUNPATH 검색 경로을 설정할 것입니다.

This blog postthis one이 더 자세히 나와 있습니다.

+0

이것이 작동하지 않는 것 같습니다. 여전히 내 오류가 계속됩니다. install_name_tool -id를 사용하여 경로를 설정했습니다. 나는 install-name_tool -add_rpath를 시도했다. 아무것도 작동하지 않습니다. Runpath 검색 경로와 런타임 검색 경로를 @loader_path /../ Frameworks로 설정하려고 시도했습니다. 여전히 "dyld : 라이브러리가로드되지 않았습니다 : /usr/local/lib/libofa.0.dylib" – david

+0

어리석은 날입니다. 내 프로젝트에서 바보 같은 설정을 포함했다. 감사! – david

+2

안녕 데이비드, 나는 같은 문제가 있고 당신이 '어리석은 설정 포함'을 의미하는지 알 수 없습니다. 간단한 예를 들려 줄 수 있습니까? – JackPearse

4

developer.apple.com에서 명령 줄 도구를 설치 한 다음 프로젝트를 라이브러리에 추가하십시오. 대상을»스크립트 실행»를 페이즈를 구축하고 단지 실행합니다 : 엑스 코드에서 다음 스크립트를 실행

install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib" 

참고 : NO '또는 솔루션을 가기 전에 dylib 이름

+0

위대한 팁! 그건 그렇고, 프레임 워크의 경우,'install_name_tool -id @executable_path /../Frameworks/MyFramework.framework/ MyFramework "$ SRCROOT/MyFramework.framework/MyFramework"(여기서'MyFramework'는 프레임 워크의 이름입니다.)를 사용하십시오. –

1

하기 전에 필요한 ""당신은해야 Windows의 종속 라이브러리 "dll"과 비교하여 MAC의 종속 라이브러리 "dylib"에 새로운 기능이 있는지 확인하십시오.

dylib 대 dll의 주된 차이점은 "설치 이름"입니다. 설치 이름은 런타임에 라이브러리를 찾을 위치를 말하며 동적 라이브러리에 구운 경로입니다. dylib를 복사하는 위치는 중요하지 않습니다. 설치 경로를 변경하지 않고는 항상 이전 경로를 가리 킵니다. 당신은

다음과 같이 명령을 사용하여 원래의 검색 경로를 (이름 설치) 알 수 otool -L a.dylib

(단지 대신에 dylib을 끕니다.dylib) 자세한 내용에 대한

에 대한 이름을 설치 링크 참조 : http://www.chilkatforum.com/questions/4235/how-to-distribute-a-dylib-with-a-mac-os-x-application

지금, dylib의 새 위치를 변경하기위한 솔루션 ("이름 설치") 단지

아래 install_name_tool로 install_name_tool 사용됩니다 - dylib의 dylb
새 경로의 이전 경로를 변경

당신은 이미 위에서 설명한 otool -L 명령으로 이전 경로를 얻을 수 있습니다. (즉, 원래의 경로 이전 경로)

"install_name_tool -change"는 dylib와 실행 파일의 검색 경로를 변경할 수 있습니다.

프로젝트에서 "스크립트 실행"파일을 작성하여 Xcode에서 사용할 수 있습니다.