Изменение архитектуры процессора с помощью node-gyp configure

Я пытаюсь создать надстройку 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-битной архитектуры?


person thefourtheye    schedule 19.07.2013    source источник
comment
node-gyp создает дополнения для текущей системы/установки node. Зачем вам нужно собирать 32-битную версию при использовании 64-битной? Если вы надеетесь распространять предварительно скомпилированные двоичные файлы, NPM в настоящее время не предлагает поддержку.   -  person Jonathan Lonowski    schedule 19.07.2013
comment
Но я могу отправить все свои файлы cpp как часть пакета и скомпилировать их во время установки, верно?   -  person thefourtheye    schedule 19.07.2013
comment
Ага. По умолчанию NPM будет использовать { "scripts": { "install": ... } } в package.json to "node-gype rebuild" в проектах с файлами, соответствующими *.gyp.   -  person Jonathan Lonowski    schedule 19.07.2013


Ответы (1)


Наконец-то я нашел способ сделать это.

node-gyp clean configure build --verbose --arch=ia32
person thefourtheye    schedule 04.10.2013
comment
Можно ли добавить опцию в качестве директивы файла gyp? Потому что это сэкономит пользователю немного времени. - person Charlie; 30.06.2015
comment
Также похоже, что это только этап настройки, на котором необходимо учитывать архитектуру системы. - person Charlie; 30.06.2015