4

我需要在 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:错误:整数常量对于“长”类型来说太大 ../deps/v8/src/execution.h:260:错误:整数常量对于“长”类型来说太大了'long' 类型 ../deps/v8/src/execution.h:259:错误:函数调用不能出现在常量表达式中 ../deps/v8/src/execution.h:260:错误:函数call 不能出现在常量表达式中

这些错误指的是这些行:

#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 位的东西。

4

1 回答 1

5

如果你想构建一个 x86_32 版本的节点,你正在为错误的目标架构修改参数。相反,将--dest-cpu参数提供给配置脚本,如下所示:

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

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

~/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".

于 2012-08-07T08:27:38.447 回答