无符号长,支持 64 位 iOS 和 OSX

Unsigned Long to support 64 bit iOS & OSX

本文关键字:iOS OSX 支持 无符号      更新时间:2023-10-16

对于我的iOS&OS X C++库,数据类型unsigned long在64位环境中造成问题。它在32位体系结构中运行良好。在GCC中,请阅读-mx32编译器标志,它将把所有64位数据类型处理为32位。在iOS&对于llvm的OS X,是否存在任何这样的标志来支持32位架构中的无符号长。我已经尝试在Complier Flags部分添加-mx32标志,无符号长的大小仍然打印为8。

谢谢。

long的大小由平台ABI定义。苹果公司宣布,您必须支持他们的64位ABI:

  • Mac应用程序的64位要求

    在WWDC 2017上,我们宣布从2018年1月开始,提交到Mac应用商店的新应用程序必须支持64位,而Mac应用程序更新和现有应用程序必须从2018年6月开始支持64位。如果您在Mac应用商店之外分发应用程序,我们强烈建议您分发64位二进制文件,以确保您的用户可以在未来版本的macOS上继续运行您的应用程序。macOS High Sierra将是最后一个毫不妥协地支持32位应用程序的macOS版本。

  • iOS 11上的64位应用程序

    提醒您,提交到应用商店的新iOS应用程序和更新必须支持64位。iOS 11中不支持32位应用程序,以前安装在用户设备上的所有32位应用都不会启动。如果你还没有在应用商店更新你的应用程序以支持64位,我们建议你提交一份更新,这样你的用户就可以继续在iOS 11上运行你的应用,今年秋天,iOS 11将掌握在数亿客户手中。

这意味着回到仅32位的构建在短期内将不起作用。从理论上讲,可以构建一个外部有64位ABI,但内部有不同类型大小的自定义编译器。OpenJDK在内部做到了这一点,GNU工具链在x86-64上支持类似的东西(尽管它仍然需要内核支持,所以它不是Darwin的选项)。但这是一项艰巨的工作,需要对系统标题进行大量调整。

不幸的是,您最好的选择是用uint32_t之类的可移植类型替换软件中的unsigned long