将框架的DYLIB_CURRENT_VERSION设置为大于65535时,Xcode会发出警告:
DYLIB_CURRENT_VERSION
warning build: Truncating -current_version to fit in 32-bit space used by old mach-o format
如果当前版本空间定义为32位整数,为什么Xcode要截断大于最大16位的版本?这是一个错误还是有一些其他的设置要调整,以使这个警告消失?我使用的Xcode版本是14.0.1。
46qrfjad1#
因为这32位是分开的:
uint32_t version; /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
这是一个不同的load命令,但是Mach-Os中所有的32位版本字段都是这样工作的,它们所能表示的最高版本是65535.255.255。还要注意,从LLVM的Angular 来看,这可能是“旧的”,但Mach-O头文件中的大多数结构体和load命令仍然使用32位版本,没有其他可用的替代版本,包括dylib的“当前”和“兼容”版本。唯一的例外似乎是LC_SOURCE_VERSION/struct source_version_command,它使用64位字段:
65535.255.255
LC_SOURCE_VERSION
struct source_version_command
uint64_t version; /* A.B.C.D.E packed as a24.b10.c10.d10.e10 */
1条答案
按热度按时间46qrfjad1#
因为这32位是分开的:
这是一个不同的load命令,但是Mach-Os中所有的32位版本字段都是这样工作的,它们所能表示的最高版本是
65535.255.255
。还要注意,从LLVM的Angular 来看,这可能是“旧的”,但Mach-O头文件中的大多数结构体和load命令仍然使用32位版本,没有其他可用的替代版本,包括dylib的“当前”和“兼容”版本。唯一的例外似乎是
LC_SOURCE_VERSION
/struct source_version_command
,它使用64位字段: