當設定框架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。
uj5u.com熱心網友回復:
因為這 32 位是分開的:
uint32_t version; /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
這是來自不同的加載命令,但 Mach-O 中的所有 32 位版本欄位都以這種方式作業。這些可以代表的最高版本是65535.255.255.
另請注意,從 LLVM 的角度來看,這可能是“舊的”,但 Mach-O 標頭中的大多數結構和加載命令仍然使用 32 位版本,沒有可用的替代方案,包括 dylibs 的“當前”和“兼容性”版本. 唯一的例外似乎是LC_SOURCE_VERSION/ struct source_version_command,它使用 64 位欄位:
uint64_t version; /* A.B.C.D.E packed as a24.b10.c10.d10.e10 */
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525368.html
