如何交叉编译Emacs for iOS

时间:2017-10-14 16:46:58

标签: emacs

Emacs 23.2已经通过在越狱的iOS设备上使用cydia为iOS编译 - source

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

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

1 个答案:

答案 0 :(得分:4)

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版本,所以也许有希望,我不知道。