2017-03-27 2 views
1

내 dylib의 종속성에 문제가 있습니다.Xcode 링커를 올바르게 설정하십시오 : 라이브러리를 찾을 수 없지만 "라이브러리와 이진 파일 링크"목록에 있음

나는 현재 follwing을 오류 메시지가 :

dyld: Library not loaded: /opt/local/lib/libgvc.6.dylib 
    Referenced from: /Users/klauskneupner/Library/Developer/Xcode/DerivedData/Visual_Thinking-bvgfcqjwnobabodenabpggrwnoet/Build/Products/Debug/Visual Thinking.app/Contents/Frameworks/libgvplugin_dot_layout.6.dylib 
    Reason: image not found 

재미있는 부분은 내가 종속성 목록에서 해당 라이브러리 (libgvc.6)를 가지고있다. build settings 그러나이 경우 libgvc.6은 /opt/local/lib이 아닌 프로젝트 디렉토리에 있습니다.

무엇을해야합니까? 미리 많은 감사드립니다!

답변

1

빌드 할 때 OS X의 정적 링커 인 ld는 응용 프로그램이 바이너리에 링크하는 각 라이브러리의 공유 라이브러리 식별자를 작성합니다. 런타임시 동적 링커 인 dyld는 응용 프로그램 이진에 지정된 경로에서 각 공유 라이브러리를로드하려고 시도합니다. otool -L YourApp.app/Contents/MacOS/YourApp을 사용하여이 정보를 볼 수 있습니다.

충돌 출력의 /opt/local/lib/libgvc.6.dylib에 대한 참조는 프로젝트의 공유 라이브러리 식별자가 libgvc.6.dylib임을 나타냅니다. 응용 프로그램이 /opt/local/lib에서 보는 것보다 그것을 대신 사용하는 방법에 .APP 번들에 라이브러리를 포함하려면 다음을 수행해야합니다

  1. 변경 libgvc.6.dylib의 공유 라이브러리 식별자가되도록 dyld 바이너리 내를 찾습니다 귀하의 응용 프로그램 번들. 일반적으로 install_name_tool -id @rpath/libgvc.6.dylib libgvc.6.dylib을 실행하면됩니다. @rpath 자리 표시자는 dyld에게 라이브러리를로드하는 바이너리의 실행 경로 검색 경로에있는 각 항목을 대체하려고 시도합니다. 기본적으로 앱 번들의 Frameworks 디렉토리가이 검색 경로에 있습니다.

  2. libgvc.6.dylib에 링크되어있는 기존의 모든 미리 만들어진 라이브러리를 업데이트하여 새 이름으로 참조하십시오 (1 단계에서 변경 한 사항은 새 바이너리가 라이브러리에 대해 작성된 경우에만 적용되므로, 과 연결된 링크가 미리 만들어진 라이브러리입니다.) install_name_tool -change /opt/local/lib/libgvc.6.dylib @rpath/libgvc.6.dylib path/to/other.dylib을 사용하여 다른 라이브러리를 업데이트 할 수 있습니다. 충돌 결과는 libgvplugin_dot_layout.6.dylib가 업데이트가 필요한 라이브러리 중 하나임을 보여줍니다. 그것은 유일한 것이 아닐 수도 있습니다.

  3. 수정 된 라이브러리가 응용 프로그램 번들의 Frameworks 하위 디렉토리에 복사되고 있는지 확인하십시오. 이것은 일반적으로 Xcode 프로젝트에서 파일 복사 빌드 단계를 사용하여 수행됩니다.

+0

위대한 직업. 고맙습니다. –

관련 문제