4

すでに持っているコードと互換性を持たせるには、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ビットのものをコンパイルする方法です。

4

1 に答える 1

5

x86_32バージョンのノードを構築する場合は、間違ったターゲットアーキテクチャのパラメータを変更しています。代わりに、--dest-cpu次のように、configureスクリプトにパラメーターを指定します。

git clone git://github.com/joyent/node.git
cd node
./configure --prefix /usr/local --dest-cpu ia32
make

これらのコマンドが正常に終了した場合、次の場所に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

を使用して、実行中のシステムに(--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"

于 2012-08-07T08:27:38.447 に答える