如何交叉编译iOS版的Emacs



Emacs 23.2是通过在越狱的iOS设备上使用cydia为iOS编译的-源

我该如何将静态链接、64位、最小、非gui的emacs交叉编译到iOS,只使用mac作为构建主机?优选地,通过使用Emacs自己的configure&make(可能需要一个补丁)。

让我们忽略代码签名和在未越狱的iOS设备上运行此cli二进制文件的问题(我知道如何解决这两个问题)。

Emacs并不真正支持交叉编译。没有。一些人已经进行了交叉编译,但这需要一些技巧,没有人为Emacs提供补丁来简化工作:-(

出现的问题如下:

  • 当从Git克隆构建Emacs时,一些文件是由Emacs自己构建的(主要是.elc文件),因此在交叉编译"目标Emacs"之前,您需要首先构建一个"主机Emacs"来编译这些文件。当从官方发布的tarball构建时,这些文件应该已经构建好并包含在tarball中,所以希望这个问题不会出现
  • 更麻烦的是:正如@lawlist提到的,Emacs构建过程首先构建一个temacs可执行文件,然后执行该可执行文件以加载一堆"预加载"的Elisp文件,然后使用进程的内存映像生成一个新的可执行二进制文件(实际的emacs)。这被称为"转储"。这样做是为了更快地启动Emacs,因为它不需要去加载所有的Elisp文件

您实际上可以使用temacs而不是emacs,而且它应该大部分都能工作。甚至还有一个名为CANNOT_DUMP的CPP标志,您可以使用它来调整一些事情,这样temacs可能会更好地工作。这将使启动新的Emacs进程变得更慢,而且这是一种基本上从未经过测试的模式,所以预计会出现怪癖和问题。

您可以通过首先交叉构建temacs,然后在目标主机上运行它来解决这个问题。当然但请注意,这种"转储"操作需要100%不可移植的黑客攻击,这些攻击需要针对每个操作系统进行调整,因此现有的转储代码很可能不太适用于iOS(即,将生成一个从一开始就崩溃和烧录的二进制代码)。

你说"Emacs 23.2是为iOS编译的",听起来这些问题中的一些已经在旧的Emacs版本中得到了解决,所以也许还有希望,我不知道。

最新更新