2012-08-06 105 views
4

我需要在32位系统上编译node.js以与我已拥有的代码兼容。在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/v 8/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位的东西。

+1

只是为了澄清:您在x86_32上,并且想要生成一个x86_64版本的节点?你为什么不简单编译x86_32位node.js? – phihag 2012-08-06 21:02:12

+0

@phihag 请问我可以在哪里找到x86_32 node.js?我试着用Google搜索它并查看nodejs.org并找到这些其他版本文件:http://nodejs.org/dist/v0.8.5/但它没有指定它是否为32位。 我的老板把我放在这个任务上,所以他可能有一个目的,让我下载当前的源代码。我会发现是否允许x86_32位。 感谢您的回复! – Dorothyy 2012-08-06 23:52:28

+0

添加了一个描述如何为x86_32编译节点的答案。请注意,设置交叉编译基础架构可能非常复杂。如果您遇到任何问题,请随时提出新问题和/或发表评论。 – phihag 2012-08-07 08:31:13

回答

5

如果您想构建x86_32版本的节点,那么您正在修改错误的目标体系结构的参数。相反,给--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 

您可以在安装它的运行系统(在前面--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"

+0

请问,github.com/joyent/node上的代码有没有区别。git和nodejs.org上的当前64位源代码。 此外,当我尝试sudo make install时,遇到此错误:
IOError:[Errno 2]没有这样的文件或目录:'deps/uv/include/ares.h' 您能否重申您的意思(在你在前面的--prefix参数中指定的前缀)? 最后,你能解释为什么我们需要/ usr/local吗? 非常感谢! – Dorothyy 2012-08-07 22:54:31

+0

它应该可以用git或(独立于架构的)源代码压缩包正常工作(但我只用git版本进行测试)。检查是否存在“ares.h”。它似乎最近已经移动;你是否得到[这个tarball](http://nodejs.org/dist/v0.8.6/node-v0.8.6.tar.gz)以及git版本的错误? '--prefix/usr/local'表示在运行'sudo make install'时node.js二进制文件将被安装为'/ usr/local/bin/node'。你可以选择另一个目录,但是'/ usr/local'是[FHS]建议的(http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)。 – phihag 2012-08-08 20:50:03

+0

为了让你知道,ares.h并没有出现在git版本中,但它存在于源码tarbell中。因为你的帮助,我完成了这项任务。谢谢!我正在研究如何找到最好的sqlite模块来与node.js一起使用。比较这些:https://github.com/joyent/node/wiki/Modules#wiki-db-sqlite – Dorothyy 2012-08-08 22:22:09

相关问题