出于純粹的學術好奇心,我試圖使 MacOS GUI 應用程式超級兼容——這意味著它必須在從 10.6 到 10.14 的所有版本的 MacOS 上運行;超出這個范圍受到 Cocoa API 和 CoreText/CoreGraphics 差異的限制。
不幸的是,該應用程式在很大程度上依賴于 C11 的幾個特性,例如__auto_type,所以我不能只在 10.6 上編譯它,而不得不求助于交叉編譯。
問題在于,在 10.13 上鏈接后,生成的 x86-32 Mach-O 二進制檔案在其標頭中包含 3 個dyld10.6 無法識別的加載命令:
- LC_MAIN (0x80000028)
- LC_DATA_IN_CODE (0x00000029)
- LC_SOURCE_VERSION (0x0000002A)
我的問題是:
如何告訴llvm-gcc聯結器避免插入這些命令,例如將 LC_MAIN 替換為更兼容的 LC_UNIXTHREAD 等?
uj5u.com熱心網友回復:
使用-macosx_version_min10.6 作為ld引數。這將生成LC_UNIXTHREAD而不是LC_MAIN在您的可執行檔案中(在您之后的其他遺留加載命令中)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376246.html
