想在一个啥都没的跳板机上跑 emacs. 自己编译了一个放上去,提示
emacs-27/src/emacs: error while loading shared libraries:
libtiff.so.5: cannot open shared object file: No such file or directory
想在一个啥都没的跳板机上跑 emacs. 自己编译了一个放上去,提示
emacs-27/src/emacs: error while loading shared libraries:
libtiff.so.5: cannot open shared object file: No such file or directory
emacs不仅仅是一个可执行文件,编译过程中也是会生成其它可执行文件和共享库的。
在生成机上用prefix临时指定一个空目录 ./configure --prefix=XXX … make -j4 install后拷贝整个prefix目录到目标机
我其实是在项目根目录下 make 完把整个文件夹上传了。libtiff.so.5 这种是系统的共享库,目标机上没有
找了个 AppImage 还是不行:
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./Emacs-27.2.glibc2.16-x86_64.AppImage)
/lib64/libc.so.6这个是系统相关的C库,两台机器系统应该不一样. 两台机器的uname -a输出是啥?
跳板机没有 uname 命令 我估计是某个版本的 centos 改装
尝试静态链接: LDFLAGS=-static ./configure … make完看下ldd emacs的动态依赖
太老的centos可以用gentoo prefix
LDFLAGS=-static 是可以安全静态链接的,我机器上生成的emacs 25M
看看这个?
还是有各种问题,我在 ubuntu 20.04 下编译 emacs 27.2
/usr/bin/ld: cannot find -lasound
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libgnutls.a(hash.o): in function `hash_lookup':
(.text+0x680): multiple definition of `hash_lookup'; fns.o:/home/wenpin/b/gnu/emacs/emacs-static/src/fns.c:4309: first defined here
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libgnutls.a(hash.o): in function `hash_string':
(.text+0x870): multiple definition of `hash_string'; fns.o:/home/wenpin/b/gnu/emacs/emacs-static/src/fns.c:4558: first defined here
/usr/bin/ld: cannot find -llcms2
collect2: error: ld returned 1 exit status
可以把编译结果上传我试一下吗
不行,我的机器是aarch64, 你的是x86_64, 传给你也跑不起来。
Emacs的编译过程:
4th, configure时, 检查有没有error, 如果有,有2个选择,安装缺失的依赖库, 或者使用–without-XXX 进行剔除, 具体可以看帮助:./configure --help
这是我机器上最终生成的emacs可执行文件
ah, 日常用机用 aarch64……
一直修改到
LDFLAGS=-static ./configure --without-x --with-sound=no --without-lcms2 --without-libsystemd
还是有大量出错,然后有点看不懂了……
@luhui 提出的 guix 方案比较可行。
可行!
ERROR: ld.so: object '/$LIB/libonion.so' from /etc/ld.so.preload cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
这种错误应该可以忽略?
看样子不属于guix管,应该可以忽略