在32位系统上编译node.js.

时间:2012-08-06 20:47:18

标签: node.js 32bit-64bit v8

我需要在32位系统上编译node.js以与我已有的代码兼容。

我从nodejs.org开始编写源代码并编译它。然后我开始更改common.gypi文件中的第164-166行。那是:

164           [ 'target_arch=="x64"', {
165             'cflags': [ '-m64' ],
166             'ldflags': [ '-m64' ],
167           }],

现在是:

164           [ 'target_arch=="x64"', {
165             'cflags': [ '-m32' ],
166             'ldflags': [ '-m32' ],
167           }],

当我再试一次时,我收到了这些错误:

../ deps / v8 / src / execution.h:259:错误:整数常量对于'long'类型来说太大 ../deps/v8/src/execution.h:260:错误:整数常量对于'long'类型来说太大 ../deps/v8/src/execution.h:259:错误:函数调用不能出现在常量表达式中 ../deps/v8/src/execution.h:260:错误:函数调用不能出现在常量表达式中

这些错误指的是这些行:

#ifdef V8_TARGET_ARCH_X64
  static const uintptr_t kInterruptLimit = V8_UINT64_C(0xfffffffffffffffe);
  static const uintptr_t kIllegalLimit = V8_UINT64_C(0xfffffffffffffff8);

我相信此代码来自谷歌的v8源代码。

对于如何修复这些特定的编译错误和/或如何在32位系统上编译64位node.js,我将不胜感激。我所做的大多数研究都是如何为64位系统编译32位的东西。

1 个答案:

答案 0 :(得分:5)

如果要构建x86_32版本的节点,则需要修改错误目标体系结构的参数。相反,将--dest-cpu参数提供给configure脚本,如下所示:

git clone git://github.com/joyent/node.git
cd node
./configure --prefix /usr/local --dest-cpu ia32
make

如果这些命令成功完成,./out/Release/node中应该有一个有效的x86_32二进制文件:

~/node$ file -b ./out/Release/node
ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), dynamically linked
(uses shared libs), for GNU/Linux 2.6.26, (...), not stripped
~/node$ ./out/Release/node
> 1 + 1
2

您可以使用--prefix将其安装在正在运行的系统中(使用您在sudo make install参数中指定的前缀)。

请注意,这需要设置有效的C和C ++编译器。在Debian / Ubuntu上,sudo apt-get install build-essential(如果您正在交叉编译,则为build-essential:i386)应该让您入门。在基于rpm的发行版上,请尝试sudo yum groupinstall "Development Tools" "Development Libraries"