2

我为 Raspberry Pi 交叉编译了更新版本的 node.js (v0.8.14)。将新版本与通过 apt-get 安装的节点 v0.6.19 进行比较,我很惊讶可执行文件的大小从 1.2Mb 跃升至 6.2Mb。

尺寸增加 5 倍是因为

  • 较新版本的节点:v0.6.19 --> v0.6.19
  • GNU/Linux 版本:2.6.26 --> 3.5.0
  • 别的东西?
pi@raspberrypi ~ $ /usr/bin/node -v; ll -h /usr/bin/节点;文件 /usr/bin/节点
v0.6.19
-rwxr-xr-x 1 root root 1.2M Jun 30 18:55 /usr/bin/node
/usr/bin/node:ELF 32 位 LSB 可执行文件,ARM,版本 1 (SYSV),动态链接(使用共享库),
对于 GNU/Linux 2.6.26,uildID[sha1]=0xb29e21fbf3e8a7db733fbcd0539e593264d88c94,剥离

pi@raspberrypi ~ $ ./node -v; ll -h ./节点;文件./节点
v0.8.14
-rwxr-xr-x 1 pi pi 6.2M Oct 28 20:43 ./node
./node:ELF 32 位 LSB 可执行文件,ARM,版本 1 (SYSV),动态链接(使用共享库),
对于 GNU/Linux 3.5.0,剥离
4

1 回答 1

0

在仔细查看两个二进制文件后readelf发现,大小增加的主要原因是较大的二进制文件使用了许多静态链接代码——较小的二进制文件链接到更多共享库。

仅供参考:在较小节点中链接的共享库是 [libssl.so.1.0.0]、[libz.so.1]、[libv8.so.3.8.9.20]、[ld-linux-armhf.so.3] , [libcares.so.2], [libcrypto.so.1.0.0], [libev.so.4], & [libutil.so.1]。

于 2012-10-30T00:31:33.093 回答