10.14版macOS.sdk编译32位可执行文件

本来今天高高兴兴,准备写一点在 Mac 上运行的32位的可执行文件,编译半天老是报错,最后发现在SDK.10.14后32位的编译库被苹果移除了,记一下降级流程。

一、背景介绍

The macOS 10.14 SDK no longer contains support for compiling 32-bit applications. If developers need to compile for i386, Xcode 9.4 or earlier is required. (39858111)
Apple has announced that its upcoming macOS Mojave release for Macs will officially be the last to support 32-bit apps.

大意:
中央已经决定了!从现在开始禁止编译32位的 mac 上的可执行文件!下一个大版本起,任何人都不得运行32位的可执行文件。

参考链接:https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes


二、基本原理

xcode-select命令用于管理 /usr/bin/gcc 等常用的开发者工具,即Command Line Tools,检查其是否存在,有时候会跟 Xcode 一起被安装,也可以单独存在。其中有一个基础属性,用来指定Command Line Tools的位置,使用命令查看它的值。

> xcode-select -p
/Application/Xcode.app/Contents/Developer

如果要修改套件(例如实现降级)的话,就要 xcode-select -s(需要root权限)来更新其位置

> sudo xcode-select -s /path/to/CommandLineTools

这样就可以切换CommandLineTools的版本了,我们下载前一个版本的 macOS.sdk,切过去,就能使用 -m32 编译文件了。

三、开始操作!

1、卸载 Xcode.app(可选)

因为我平时基本不用 Xcode,当初不知道为啥要下载回来,直接卸载了吧,因为默认的命令行工具指向那里面了,防止新版的SDK 卸载不干净。

2、下载安装旧版的 CommandLineTools

https://developer.apple.com/download/more/

建议下载版本为:10.13,这是带有32位链接库的最新的版本,10.14就移除掉了。
https://download.developer.apple.com/Developer_Tools/Command_Line_Tools_macOS_10.13_for_Xcode_10.1/Command_Line_Tools_macOS_10.13_for_Xcode_10.1.dmg

3、将xcode-select配置过去

默认情况下,安装好的CommandLineTools在 /Library/Developer/CommandLineTools,指定过去就好了。

四、最终成果

➜  /tmp /usr/bin/clang test.c -m32
ld: warning: The i386 architecture is deprecated for macOS (remove from the Xcode build setting: ARCHS)
➜  /tmp file a.out
a.out: Mach-O executable i386
➜  /tmp /usr/bin/clang test.cpp -m32
ld: warning: The i386 architecture is deprecated for macOS (remove from the Xcode build setting: ARCHS)
➜  /tmp file a.out
a.out: Mach-O executable i386



=============================================================
随着访客的增多,LeadroyaL在本站流量的开支越来越多了,曾经1元能用1个月,现在1元只能用3天。如果觉得本文帮到了你,希望能够为服务器的流量稍微打赏一点,谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code