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

标签 node.js 32bit-64bit v8

我需要在 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/

相关文章:

javascript - AWS EC2 上未建立套接字连接

node.js - Node js 和代码优先

java - 在 64 位 Windows 上编译的 JAR 不能在 32 位上运行

javascript - 在 C++ Node nan 插件中处理 JavaScript 对象

javascript - 如何通过 npm TypeScript 编译器生成 JavaScript 包

node.js - 使用 IPC 作为中间人使用另一个包

c# - 为什么我的 64 位程序可以成功调用 32 位 DLL?

python - 64 位 pyodbc 是否可以与 32 位 MS Access 数据库通信?

适用于 Windows 的 Chrome 79 中的 Javascript 分析器 : What does self-time include?