我需要在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位的东西。
答案 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"
。