使用node-gyp配置更改处理器体系结构

the*_*eye 3 javascript node.js node-gyp

我正在尝试创建一个Node C Addon.我是64位机器,但我需要将Node C Addon编译成32位二进制文​​件.默认情况下,node-gyp选择所有64位库进行编译和链接过程.

{
  "targets": [
    {
      "cflags": [ "-m32" ],
      "ldflags": [ "-m elf_i386" ],
      "cflags_cc": [ "-fPIC -m32" ],
      "target_name": "hello",
      "sources": [ "Hello.cpp" ],
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的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
Run Code Online (Sandbox Code Playgroud)

它仍然试图在链接过程中找到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
Run Code Online (Sandbox Code Playgroud)

这个不兼容的文件实际上是一个软链接 /lib64/libstdc++.so.6.0.8

我编译 node-gyp clean configure build --verbose

如何覆盖此行为并为32位体系结构进行node-gyp编译?

the*_*eye 8

我终于想出办法来做到这一点.

node-gyp clean configure build --verbose --arch=ia32
Run Code Online (Sandbox Code Playgroud)