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

Dor*_*hyy 4 v8 32bit-64bit node.js

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

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

164           [ 'target_arch=="x64"', {
165             'cflags': [ '-m64' ],
166             'ldflags': [ '-m64' ],
167           }],
Run Code Online (Sandbox Code Playgroud)

现在它是:

164           [ 'target_arch=="x64"', {
165             'cflags': [ '-m32' ],
166             'ldflags': [ '-m32' ],
167           }],
Run Code Online (Sandbox Code Playgroud)

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

../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);
Run Code Online (Sandbox Code Playgroud)

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

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

phi*_*hag 5

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

git clone git://github.com/joyent/node.git
cd node
./configure --prefix /usr/local --dest-cpu ia32
make
Run Code Online (Sandbox Code Playgroud)

如果这些命令成功完成,则应该有一个有效的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
Run Code Online (Sandbox Code Playgroud)

您可以将它安装在正在运行的系统中(在--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".