如何构建 Emacs 实例以在与构建它的系统不同的 x86_64 系统上运行?

如何构建 Emacs 实例以在与构建它的系统不同的 x86_64 系统上运行?

我想为 CentOS 系统构建最新版本的 Emacs(来自),但构建必须在 Debian 系统1git.sv.gnu.org上完成。两个系统都运行在 x86_64 架构上。

我以前见过执行此类操作的说明,但现在我需要它们,但我找不到它们(即,我还没有找到适合我的 Google 搜索的关键字)。

我找不到我要查找的说明Emacs 的安装信息, 任何一个。同样,这也可能是由于错误的搜索策略造成的,但我突然想到,也许我没有找到此信息的原因是它只是通用的 Unix 知识(例如,解压缩 tar 球,或更改解压内容的所有权),不特定于 Emacs。因此,我在这里发布问题。

回顾一下,我的目标是创建一个独立的 Emacs 可执行文件,不需要主机系统中的任何库。

我必须使用哪些设置来编译 Emacs 才能实现此目标?更具体地说,我必须如何更改以下顺序

./autogen.sh
./configure --prefix=${INSTALL_DIR} --with--m17n-flt
./make bootstrap
./make install

...去做这个?

就其价值而言,在“构建”(Debian)系统中,cc符号链接到/usr/bin/x86_64-linux-gnu-gcc-6.


1这是一个很长的故事,但基本上,我在 Debian 系统中有 root 访问权限,但在 CentOS 系统中没有。

答案1

创建静态链接二进制文件的方法是将-static选项传递给链接器。由于您不直接运行链接器,因此您需要通过构建系统(也可能通过编译器)来获取链接器。

Emacs 是一个 GNU 软件包,因此它可能使用 autotools 进行构建。在这种情况下,您需要使用该LDFLAGS变量:

./configure LDFLAGS="-static"

不幸的是,在尝试此操作后,我发现 emacs 使用了许多glibc在静态二进制文件中不起作用的函数调用;作为其中一部分构建的“bootstrap-emacs”甚至会因此在启动时出现段错误。所以你不能用静态构建来做到这一点。

相反,您可以执行以下操作之一:

  • 您在 Debian 机器上设置 CentOS chroot,在其中进行构建,然后将二进制文件复制到 CentOS chroot
  • 您可以使用替代前缀构建一个自动工具包,因此它可以在您的主目录中运行:

    ./configure --prefix=$HOME/emacs --exec-prefix=$HOME/bin
    

    这将编译 emacs,以便它安装在 中$HOME/bin,并在 下找到所有支持文件$HOME/emacs。当然,这是假设所需的库在 CentOS 计算机上可用,但情况可能并非如此。

  • 你可以只您的本地 root 为您安装 emacs...

相关内容