xcode 如果版本高于16位最大值,可可Framework“当前库版本”将发出32位截断警告

guz6ccqo  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(169)

将框架的DYLIB_CURRENT_VERSION设置为大于65535时,Xcode会发出警告:

warning build: Truncating -current_version to fit in 32-bit space used by old mach-o format

如果当前版本空间定义为32位整数,为什么Xcode要截断大于最大16位的版本?
这是一个错误还是有一些其他的设置要调整,以使这个警告消失?
我使用的Xcode版本是14.0.1。

46qrfjad

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位字段:

uint64_t version; /* A.B.C.D.E packed as a24.b10.c10.d10.e10 */

相关问题