当我将 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.dylib
。
otool -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,其中包含缓存中所有库的纯文本内存映射。
当我想将 libcurl 添加为依赖项时,我在 Link Binary with Libraries 下添加 libcurl.4.tbd
并且它可以工作。据我了解,这些 tbd
文件是存根库,用于启用动态库的链接过程,同时保持 Xcode SDK 下载较小(通过用一种占位符替换实际的 dylib)。
当我在 Xcode 中打开 libcurl.4.tbd
时,它列在安装名称 /usr/lib/libcurl.4.dylib
下,我希望找到这个文件。但是我无法在此目录或我系统的其他任何地方找到实际的 libcurl.4.dylib
。
otool -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,其中包含缓存中所有库的纯文本内存映射。