有没有一种方法可以在 Linux 上构建 emacs,这样它就不会将构建它的路径嵌入到二进制文件中,并且可以无害地重新定位到不同的路径?
也就是说,如果您使用构建--prefix=/a/b/c
然后将所有内容移至/d/e/f
它将无法运行,因为它取决于固定路径/a/b/c
。我看到/a/b/c
二进制文件本身内部的字符串。
Windows emacs 可以安装到任何目录,并且从那里运行得很好,所以这让我觉得你可以告诉 Linux emacs 以同样的方式运行,“无论你现在坐在哪里”。
我们没有像目录树上的固定名称符号链接指向其下面的变量路径这样的选项。
答案1
即使您在编译时不采取任何预防措施,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/etc
。您可能INFOPATH
还需要设置。