如何编译独立的node扩展插件(Addons)
发布于 10 年前 作者 shishuo365 4124 次浏览 最后一次编辑是 8 年前

如题:如何编译一个独立的,不依赖于linux系统库的的可运行程序。 下面说一下需求: 同一台机器上,会运行多个Node程序,有js项目,有node插件项目,还有混合项目。 js项目对node版本的依赖要轻得多,而插件就不同了,对版本的依赖比较重,甚至是严格, 当系统升级时,对node插件的影响就比较大,甚至于要重新编译。 有没有什么好的解决办法,可以编译一个非常独立的Node,或者另有好的解决方案。 nodejs官网释出的版本,也需要依赖系统库。


感谢shaun的提醒,“node 本身的版本没有问题”,一语中的! 所以,将标题修改为:如何编译独立的node扩展插件(Addons)? 纠正一下问题,官方给出的node Binaries是独立的, 真正的问题在于,编译node的C++插件时,产生了依赖库,这个该如何解决? 是否有方法可以把所有使用到的系统库全部编译进去。 2014.07.29更新


结帖! 感谢 shaun 和 kingapple zhs007 的指点和提醒。 下面做一下小结,方便后来人查看: 编译独立的node扩展插件(Addons),这个问题的实质是编译不依赖于其他库的动态链接库,因为node Addons本质上就是动态链接库。 所以,解决办法是,在编译动态链接库时,所有依赖的库使用静态链接的方式编译进去; 不过有一点需要注意的:用了 GPL 的库就没法静态连接了。(shaun提供) 2014.08.03更新

10 回复

1、node 本身的版本没有问题,如果这个都有问题,就不要把 node 放到 $PATH,每个版本放到不同的目录 2、项目中不要是用全局的 npm,也就是说用 npm 安装依赖时不要加 -g 参数,这样每个项目都有自己独立的 node_modules 3、为每个项目建立各自的 package.json 文件,在 npm install 的时候带上 --save 参数,就会自动帮你写入依赖的各种版本 4、为每个项目调用不同的 node 版本去执行

这样同时解决了 node 的多版本,和 npm 依赖的版本问题

node除了glibc外,还依赖其他什么库呢? 都静态链接?

@kingapple python2.7是必须的要安装的。

@shaun “node 本身的版本没有问题”,一语中的! 纠正一下问题,官方给出的node Binaries是独立的, 真正的问题在于,编译node的c/c++插件时,产生了依赖库,这个该如何解决?是否有方法可以把所有使用到的系统库全部编译进去。

@kingapple 是我表述有误,真正的问题是node Addons的依赖库问题。

@shishuo365 那些也准备静态链接么?

@kingapple 是的,这样node Addons才可以尽少的受系统升级和调整带来的影响。

要看开源协议,用了 GPL 的库就没法静态连接了

@shaun 非常感谢~

回到顶部