nodejs Linux Binaries是如何做到一次编译,处处运行的?
发布于 10 年前 作者 shishuo365 5233 次浏览 最后一次编辑是 8 年前

如题,如果我们直接从官网下载 Source Code ,然后,在一个平台上编译,比如 CentOS 6 上编译,完成后,再拷贝到 CentOS 5 上面,是运行不了的; 提示,找不到一些链接库,例如 libc.so 等 nodejs Linux Binaries是如何做到的,哪里有这方面的讲解,希望先知不吝赐教,感谢~

5 回复

有一种科学,叫做静态编译。。。

高版本兼容低版本

@liuyanghejerry 首先,表示感谢。 其次,完全静态编译的方式,会导致其他的问题,下面就是一例: “在gcc的编译的时候加上–static参数, 这样在编译的时候就会优先选择静态库进行编译,而不是按照默认的情况选择动态库进行编译。 不过使用–static参数会带来另外的问题,不推荐使用,主要会带来下面的问题: 如果只有动态库,而不存在同名的静态库,链接的时候也不会报错,但在运行的时候可能会出现错误 /lib/ld64.so.1: bad ELF interpreter:由于我们程序本身在运行的需要系统中一些库的支持,在采用–static编译方式之后,链接的就是这些库的静态编译版本,等于使用的是 编译机上的库,但是我们的运行环境可能和编译机有所不同”

@shishuo365 你说的情况和你的问题关系不大吧,你只是说了静态链接不小心链接到了动态库上的情况,那静态链接本身并没有问题啊

@shishuo365 不同系统,elf格式还有可能不同?

回到顶部