2013-07-19 1 views
3

Node C Addon을 생성하려고합니다. 내 것은 64 비트 머신이지만 Node C Addon을 32 비트 바이너리로 컴파일해야합니다. 기본적으로 node-gyp은 컴파일 및 연결 프로세스를 위해 모든 64 비트 라이브러리를 선택합니다.node-gyp 구성으로 프로세서 아키텍처 변경

{ 
    "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 비트 라이브러리를 찾을 시도하고 실패합니다. 호환되지 않는 파일이 실제로 내가이 동작을 무시하고 노드 활력는 32 비트 아키텍처 용으로 컴파일 할 수있는 방법 node-gyp clean configure build --verbose

컴파일 /lib64/libstdc++.so.6.0.8

에 소프트 링크되어 있는지

/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 

?

+0

'node-gyp'은 현재 시스템에 대한 addons /'node'의 설치를 빌드합니다. 왜 64 비트를 사용할 때 32 비트를 빌드해야합니까? 사전 컴파일 된 바이너리를 배포하려는 경우 NPM은 현재 지원하지 않습니다. –

+0

그러나 모든 cpp 파일을 패키지의 일부로 제공하고 설치하는 동안 컴파일 할 수 있습니까? – thefourtheye

+0

예. NPM은'package.json' 노드 [''node-gype rebuild ''] (https://github.com/isaacs/read)에'{ "scripts": { "install": ...}}' -package-json/blob/v1.1.0/read-json.js # L128-L146)을'* .gyp'과 일치하는 프로젝트에 추가합니다. –

답변

8

나는 이것을하는 방법을 마침내 발견했습니다.

node-gyp clean configure build --verbose --arch=ia32 
+0

옵션을 gyp 파일 지시어로 추가 할 수 있습니까? 왜냐하면 사용자에게 약간의 시간을 절약 할 수 있기 때문입니다. – Charlie

+0

또한 시스템의 아키텍처를 알아야하는 구성 단계 인 것처럼 보입니다. – Charlie

관련 문제