我想为 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...