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

我需要在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位的东西.

最佳答案
如果要构建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

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

请注意,这需要设置有效的C和C编译器.在Debian / Ubuntu上,sudo apt-get install build-essential(或者build-essential:i386,如果你是交叉编译的话)应该让你开始.在基于rpm的发行版上,尝试使用sudo yum groupinstall“开发工具”“开发库”.

转载注明原文:在32位系统上编译node.js. - 代码日志