当我将 libcurl.4.tbd 添加为 xcode 中的依赖项时,实际发生了什么?

What actually happens when I add libcurl.4.tbd as a dependency in xcode?

当我想将 libcurl 添加为依赖项时,我在 Link Binary with Libraries 下添加 libcurl.4.tbd 并且它可以工作。据我了解,这些 tbd 文件是存根库,用于启用动态库的链接过程,同时保持 Xcode SDK 下载较小(通过用一种占位符替换实际的 dylib)。

当我在 Xcode 中打开 libcurl.4.tbd 时,它列在安装名称 /usr/lib/libcurl.4.dylib 下,我希望找到这个文件。但是我无法在此目录或我系统的其他任何地方找到实际的 libcurl.4.dylibotool -L 给我相同的文件路径。

在这种情况下如何处理链接以及实际 dylib 位于何处? 我是 运行 macOS 11.1

Mac 上的所有内置库都包含在一个大缓存文件中OS(至少在 Big Sur,在早期系统上不确定)和 iOS(因为 iPhone OS3.1)。 iPhone Dev Wiki.

中提供了更多信息

要找到缓存在您机器上的实际位置,运行 您已编译的可执行文件设置了 DYLD_PRINT_SEGMENTS 环境变量。这将在 stderr 上产生大量输出,如下所示:

% DYLD_PRINT_SEGMENTS=1 ./your_executable
re-using existing shared cache (/System/Library/dyld/dyld_shared_cache_x86_64h):
        0x7FFF2003B000->0x7FFF7FFBAFFF init=5, max=5 read execute 
        0x7FFF8003B000->0x7FFF8DFDEFFF init=3, max=3 read write data
        0x7FFFC003B000->0x7FFFE22DAFFF init=1, max=1 read 
dyld: Main executable mapped /Users/janten/Desktop/linky/./a.out
        __PAGEZERO at 0x00000000->0x100000000
            __TEXT at 0x106305000->0x106309000
      __DATA_CONST at 0x106309000->0x10630D000
            __DATA at 0x10630D000->0x106311000
        __LINKEDIT at 0x106311000->0x106315000
dyld: Using shared cached for /usr/lib/libcurl.4.dylib
            __TEXT at 0x7FFF32F8F000->0x7FFF32FF5000
            __DATA at 0x7FFF89A67070->0x7FFF89A6A04C
        __LINKEDIT at 0x7FFFC05FF000->0x7FFFDEF17CB0
...

在本例中,缓存位于/System/Library/dyld/dyld_shared_cache_x86_64h。如果你想看到这个文件的完整内容,请看/System/Library/dyld/dyld_shared_cache_x86_64h.map,其中包含缓存中所有库的纯文本内存映射。