可重定位的 emacs

max*_*olk 6 compiling emacs

有没有办法在 Linux 上构建 emacs,这样它就不会将构建它的路径嵌入到二进制文件中,并且可以无害地重新定位到不同的路径?

也就是说,如果您构建 with--prefix=/a/b/c然后将所有内容移动到/d/e/f它就不会运行,因为它取决于固定路径/a/b/c。我看到/a/b/c二进制文件本身内部的字符串。

Windows emacs 可以安装到任何目录并且从那里运行得很好,所以这让我觉得你可以告诉 Linux emacs 以相同的方式运行,从“你现在坐在哪里”。

我们没有像固定名称符号链接那样指向目录树下面的变量路径的选项。

Gil*_*il' 4

即使您在编译时不采取任何预防措施,Emacs 也可以基本无害地进行重定位。如果硬编码路径不起作用,Emacs 会查找可执行文件附近的目录。

Emacs 尝试确定调用它的可执行文件所在的位置。它将这些信息存储在变量中invocation-directory。假设这是/path/to/bin/emacs;Emacs 在硬编码目录中查找所需的数据文件,然后回退到/path/to.

您需要以与 Emacs 源代码相同的方式构建目录,或多或少,具有顶级目录bin, etc, leim, lib-src, lisp, site-lisp。特别是,至少在 Emacs 23.2 中,该目录lib-src必须存在(即使它是空的)。

有一些目录 Emacs 无法通过这种方式找到。设置环境EMACSDATA=/path/to/etcINFOPATH您可能还需要设置。