3

Node C アドオンを作成しようとしています。私のマシンは 64 ビット マシンですが、Node C アドオンを 32 ビット バイナリとしてコンパイルする必要があります。デフォルトでは、node-gyp はコンパイルおよびリンク プロセスのためにすべての 64 ビット ライブラリを選択します。

{
  "targets": [
    {
      "cflags": [ "-m32" ],
      "ldflags": [ "-m elf_i386" ],
      "cflags_cc": [ "-fPIC -m32" ],
      "target_name": "hello",
      "sources": [ "Hello.cpp" ],
    }
}

これは私の bindings.gyp ファイルです。-m32cflags を渡し、ldflagsとして設定してい-m elf_i386ます。正常にコンパイルされますが-m64、コンパイル プロセスの詳細な出力にも同様に表示されます。

g++ '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' ... 
-fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -m32 -O2 -fno-strict-aliasing 
-fno-tree-vrp -fno-tree-sink -fno-rtti -fno-exceptions -fPIC -MMD -MF 
./Release/.deps/Release/obj.target/hello/Hello.o.d.raw  -c -o 
Release/obj.target/hello/Hello.o ../Hello.cpp

また、リンク プロセス中に 64 ビット ライブラリを見つけようとして失敗します。

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-****/4.1.2/libstdc++.so when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

その互換性のないファイルは、実際にはへのソフトリンクです/lib64/libstdc++.so.6.0.8

私はコンパイルしますnode-gyp clean configure build --verbose

この動作を無効にして、node-gyp を 32 ビット アーキテクチャ用にコンパイルするにはどうすればよいですか?

4

1 に答える 1