使用MacOS 10.13中的构建工具,正确定位MacOS 10.6



出于纯粹的学术好奇心,我试图使MacOS GUI应用程序超级兼容——这意味着它必须在10.6到10.14的所有版本的MacOS上运行;超出这个范围受到Cocoa API和CoreText/CoreGraphics的差异的限制
不幸的是,该应用程序在很大程度上依赖于C11的几个功能,例如__auto_type,所以我不能只在10.6上编译它,必须进行交叉编译。

问题是,在10.13链接后,生成的x86-32 Mach-O二进制文件在其标头中包含10.6的dyld无法识别的3个加载命令:

  1. LC_MAIN(0x80000028(
  2. LC_DATA_IN_CODE(0x00000029(
  3. LC_SOURCE_VERSION(0x0000002A(

我的问题是:
如何告诉llvm-gcc链接器避免插入这些命令,例如用更兼容的LC_UNIXTHREAD替换LC_MAIN等。?

使用-macosx_version_min10.6作为ld参数。这将在您的可执行文件中生成LC_UNIXTHREAD而不是LC_MAIN(以及您想要的其他遗留加载命令(。

最新更新