如何在Banana Pi上编译安装Node.js

Node.js是现在非常流行也非常实用的快速网络应用架设平台, 用它可以轻松的创建非阻塞I/O模型的Web应用, 作为一个服务端, 毫无疑问Node.js是非常优秀的. 现在, Node.js也可以在ARM平台上编译安装, 也就是说我们可以把它安装到Banana Pi上, 利用现成的大量优秀Node.js项目来让Banana Pi做更多事情, 从这一点上看, 它和Python比较相似.

准备

  • 一个Banana Pi
  • 一台装载了Linux操作系统的电脑(可选)
  • 互联网

开始

由于Node.js没有给ARM平台现成的二进制的安装包, 所以这次我们得自己编译Node.js了. 为了编译出Node.js, 我们需要一份Node.js的源代码, 源代码可以从Node.js的官网Github得到.

由于Node.js方面的问题, 部分版本在ARM平台编译是有问题的, 差不多十天之前, 我在官网上得到的Node.js还无法在Banana Pi或CubeBoard等设备上完成编译, 在这个Issue里你可以了解到更多.

我现在编译通过的安装包, 是从Github的v0.10分支里得到的, 当你看到的这篇文章的时候, 可能已经不存在这个问题了, 还是那句话: 多做尝试.

如果要得到这份v0.10分支的源代码, 像这样从Github仓库里克隆到本地就行了:

git clone https://github.com/joyent/node.git cd node git checkout v0.10  

得到源代码后, 我们要知道ARM架构的处理器在编译效率上远低于x86架构的处理器, 经过我的尝试, 在Banana Pi上编译v0.10.32-pre需要1个小时的时间, CPU的使用率为97%, 不知道加入-j 2参数编译能否节省一点时间, 总之编译时间肯定是要比x86处理器久的.

综上所述, 你面临两个选择, 一个是在Banana Pi上花费一个小时时间自动编译, 一个是在x86架构的Linux系统上进行交叉编译(具体速度视处理器性能而定, 一般来说肯定会比ARM快).

直接在Banana Pi上编译十分简单, 只需要执行以下命令:

./configure --without-snapshot make && make install

这里用到–without-snapshot是因为snapshot在ARM平台会造成Segmentation Fault, 所以必须添加.

如果你要交叉编译, 则需要在Linux系统的电脑上安装gcc-arm-linux-gnueabi, 并设置以下变量:

export AR=arm-linux-gnueabihf-ar export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export LINK=arm-linux-gnueabihf-g++  

配置并编译:

./configure --without-snapshot --dest-cpu=arm --dest-os=linux make

编译完毕后在Banana Pi上运行./node检查是否正常运行, 最后执行make install完成安装.