Я пытаюсь создать надстройку 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. Я передаю -m32
в cflags и устанавливаю 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-битной архитектуры?
node-gyp
создает дополнения для текущей системы/установкиnode
. Зачем вам нужно собирать 32-битную версию при использовании 64-битной? Если вы надеетесь распространять предварительно скомпилированные двоичные файлы, NPM в настоящее время не предлагает поддержку. - person Jonathan Lonowski   schedule 19.07.2013{ "scripts": { "install": ... } }
вpackage.json
to"node-gype rebuild"
в проектах с файлами, соответствующими*.gyp
. - person Jonathan Lonowski   schedule 19.07.2013