我想我在这里有了答案的开始。首先,您需要能够在与运行时机器具有相同架构的某些机器上构建 Emacs。你可以通过交叉编译来解决这个问题,但这会让一切变得更加复杂。
tar xf emacs.tar.bz2
cd emacs
./autogen.sh
./configure --with-x=no --prefix=/usr/local
make
mkdir install
make DESTDIR=$PWD/install install
你可以随心所欲地制作前缀,它必须是你将在运行时机器上安装 Emacs 的位置。X 被禁用是因为它大大减少了所需的库数量,而且无论如何您都在通过 ssh 运行。
现在弄清楚运行 Emacs 需要哪些共享库。快速浏览 Emacs 附带的所有可执行文件会发现,这是整个 Emacs 安装所需的库的超集。
$ ldd install/usr/local/bin/emacs
linux-vdso.so.1 (0x00007fff427fe000)
libasound.so.2 => /usr/lib/libasound.so.2 (0x00007f66b25a0000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f66b2398000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f66b2151000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f66b1de9000)
libgpm.so.2 => /usr/lib/libgpm.so.2 (0x00007f66b1be2000)
libncursesw.so.5 => /usr/lib/libncursesw.so.5 (0x00007f66b1983000)
libgnutls.so.28 => /usr/lib/libgnutls.so.28 (0x00007f66b1673000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f66b1457000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f66b1159000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f66b0dac000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f66b0ba8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f66b2897000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f66b0992000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f66b076f000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x00007f66b054e000)
libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x00007f66b033a000)
libnettle.so.4 => /usr/lib/libnettle.so.4 (0x00007f66b010c000)
libhogweed.so.2 => /usr/lib/libhogweed.so.2 (0x00007f66afedd000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f66afc66000)
因此,将所有这些库复制到安装树中的某个目录。 linux-vdso.so
是虚拟的,不能/不需要复制。
mkdir install/usr/local/solib
cp /usr/lib/libasound.so.2 /usr/lib/librt.so.1 /usr/lib/libdbus-1.so.3 /usr/lib/libxml2.so.2 /usr/lib/libgpm.so.2 /usr/lib/libncursesw.so.5 /usr/lib/libgnutls.so.28 /usr/lib/libpthread.so.0 /usr/lib/libm.so.6 /usr/lib/libc.so.6 /usr/lib/libdl.so.2 /lib64/ld-linux-x86-64.so.2 /usr/lib/libz.so.1 /usr/lib/liblzma.so.5 /usr/lib/libp11-kit.so.0 /usr/lib/libtasn1.so.6 /usr/lib/libnettle.so.4 /usr/lib/libhogweed.so.2 /usr/lib/libgmp.so.10 install/usr/local/solib/
全部存档。我最近一直喜欢 squashfs,如果你愿意,可以使用 tar。
mksquashfs install/usr/local emacs.sfs -noappend
在运行时机器上,提取文件并将它们复制到前缀。使用 squashfs,我们可以挂载它。
mount emacs.sfs /usr/local
使用 set启动 emacsLD_LIBRARY_PATH
以使用您之前复制的库。
LD_LIBRARY_PATH=/usr/local/solib /usr/local/bin/emacs
希望这会奏效。我在一个与我构建的操作系统相当相似的虚拟机中进行了测试,所以当它们相差很大时,可能会出现问题。