2017-02-13 1 views
2

저는 Xcode 외부에서 개발 된 macOS dylib 프레임 워크를 개발 중이며 install_name 옵션의 중요성을 이해하려고합니다.macOS Mach-O dylib LC_ID_DYLIB 이름 또는 install_name의 의미는 무엇입니까?

예를 들어 install_name 인수를 사용하여 애플리케이션 번들의 프레임 워크에서 찾을 수있는 것과 비슷한 섹션을 설정할 수 있습니다.

clang++ ... -install_name @executable_path/../Frameworks/somelib.framework/Versions/somelib ... 

그런 다음 otool -l에 내 이름이 (기본적으로 -o 옵션을 일치) 기본값과 다른 바이너리에 설정되어있는 것을 볼 수 있습니다.
otool -l somelib 
... 
      cmd LC_ID_DYLIB 
     cmdsize 96 
     name @executable_path/../Frameworks/somelib.framework/Versions/A/somelib (offset 24) 
    time stamp 1 Wed Dec 31 19:00:01 1969 
     current version 1.0.0 
compatibility version 1.0.0 
.... 

그래서 나는 그것을 설정하는 방법을 이해하지만, 내가 이해하지 못하는 것은 정확히 값은 그것이 있어야하는지 알고 사용된다 없으며, 내가 거기에 어떤 문서를 찾을 수있는 것입니다.

LC_LOAD_DYLIB 섹션에 바이너리를 찾는 위치에 대한 정보가 필요한 이유를 알 수 있습니다 (이 섹션은 다른 바이너리를 참조하므로).하지만 왜 dylib에 자체 정보가 필요한지에 대한 정보가 필요합니까? 바이너리와 연결되는 바이너리는 발견 된 바이너리 여야합니까?

정확히 macOS dylib LC_ID_DYLIBinstall_name은 무엇을합니까?

답변

4

dylib를 링크하는 모든 클라이언트는 LC_ID_DYLIB load 명령에 지정된 경로를 런타임에 dylib를 찾을 경로로 기록합니다. 이것은 dylib가 빌드시에 존재하는 경로가 종종 런타임에 발견되는 곳이 아니기 때문에 유용합니다.

+0

내가 무슨 뜻인지 알 것 같아. "이 파일은 링크 된 바이너리에 복사 될 경로입니다"라고 말하는 것이 합리적입니까? –

+0

예, 정확합니다. – bdash

관련 문제