我需要在 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: 错误:整数常量对于“长”类型来说太大 ../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 版本的 Node ,你正在为错误的目标架构修改参数。相反,将 --dest-cpu
参数提供给配置脚本,如下所示:
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 "Development Tools""Development Libraries"
。
关于node.js - 在 32 位系统上编译 node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835704/