sourcetip

맥 OS X의 표준 C 라이브러리는 어디에 있습니까?

fileupload 2023. 10. 5. 23:27
반응형

맥 OS X의 표준 C 라이브러리는 어디에 있습니까?

Mac OS X에서 표준 C 라이브러리를 찾으려고 합니다. "/usr/lib/libc와 같은 경로를 시도했습니다.a" 또는 "/usr/lib/libm.a" 하지만 시스템에 그런 파일이 없습니다.어디에 있습니까?

그런 다음 리눅스 머신에서 터미널을 사용하여 다음과 같은 명령을 실행했습니다.

ar t /usr/lib/libc.a

.o 파일의 목록을 반환하며 이러한 .o 파일은 다음과 같습니다.

svc.o
xdr.o
...

이 파일들의 의미는 무엇입니까?어디에서 그들을 찾을 수 있습니까?

표준 라이브러리는 OS X의 libSystem.dylib의 일부입니다.

그런 것 같네요.

/usr/lib/libSystem.B.dylib

(Mac OS X v10.6.7(Snow Leopard)).


사용 방법을 확인할 수 있습니다.otool— 이것은 macOS v10.14.2 (Mojave)를 실행하는 맥 상에 있으며, (아주 간단한) 프로그램은 Xcode의 Clang을 사용하여 만들어졌습니다.

$ otool -L al

al:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)

$ clang --version
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

다른 프로그램은 라이브러리가 더 많습니다.예를 들어, 하노이 타워 프로그램은 집에서 만든 GCC 8.2.0과 함께 지어졌습니다.ncurses라이브러리:

$ otool -L hanoi

hanoi:
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
    /opt/gcc/v8.2.0/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

그리고 또 다른 프로그램은 더 많은 것을 사용합니다.

$ otool -L $(which sqlcmd)

/Users/jonathanleffler/bin/sqlcmd:
    /usr/lib/libedit.3.dylib (compatibility version 2.0.0, current version 3.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    isqls09b.dylib (compatibility version 0.0.0, current version 0.0.0)
    iasfs09b.dylib (compatibility version 0.0.0, current version 0.0.0)
    igens09a.dylib (compatibility version 0.0.0, current version 0.0.0)
    iosls09a.dylib (compatibility version 0.0.0, current version 0.0.0)
    sobj4/igl4a304.dylib (compatibility version 0.0.0, current version 0.0.0)
    sobj4/iglxa304.dylib (compatibility version 0.0.0, current version 0.0.0)
    /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
    /opt/gcc/v8.2.0/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

그리고 시스템 프로그램은 다른 라이브러리와 프레임워크를 사용할 수 있습니다.

$ otool -L $(which passwd)

/usr/bin/passwd:
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1561.0.0)
    /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libpam.2.dylib (compatibility version 3.0.0, current version 3.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)

$ otool -L /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome:
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1349.63.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 57740.51.2)
    /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 888.51.1)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.5.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.50.2)

다른 많은 일들을 할 수 있습니다.otool— 맨 페이지를 보세요.

두번째 질문에 답하자면: 정적 라이브러리는 아카이브 파일에 보관되므로.a. ZIP, TAR, RAR 등에서 압축을 뺀 것과 마찬가지로 파일 더미를 위한 컨테이너일 뿐입니다.ar(stands for archive) 유틸리티로 나열된 파일은 아카이브에 포함된 원본 파일입니다.짐을 풀고 원본 파일을 가져오시면 됩니다.

정적 라이브러리는 동적 라이브러리와 극명한 대조를 이룹니다.정적 라이브러리의 내용은 링커에 의해 추출되어 링크 시 프로그램에 포함됩니다. 마치 프로그램 빌드 과정의 다른 컴파일 단계의 결과인 것처럼 말입니다.

그러나 동적 라이브러리는 단순한 객체 파일의 아카이브가 아니라 그 자체로 연결된 실행 파일이며 동적 링크기는 이를 연결 프로세스 주소 공간에 매핑하고 매핑된 주소와 일치하도록 심볼 테이블을 조정합니다.

질문의 나머지 절반에 답을 드리자면, OS X는 일반적으로 정적 라이브러리를 사용하지 않습니다..a). 이와 같이 없습니다.libc.a(또는libSystem.aOS X에서.

사실, 그것은 존재했습니다./usr/lib/system/libsystem_c.dylib.

다음을 통해 이를 확인할 수 있습니다.nm -gU /usr/lib/system/libsystem_c.dylib

macOS v11(Big Sur)이후 파일이 이동/제거되었습니다.

언급URL : https://stackoverflow.com/questions/6240639/where-is-the-standard-c-library-on-mac-os-x

반응형