Построить аддон node.js без node-waf - PullRequest
6 голосов
/ 12 июля 2011

Я пишу простое дополнение node.js на C ++ с использованием Eclipse CDT. В проекте много файлов, и я бы хотел использовать систему управляемой сборки Eclipse.

Я могу скомпилировать простой пример дополнения с помощью node-waf, но я не могу настроить свой набор инструментов Eclipse для создания правильной общей библиотеки без waf. Ваф использует gcc за кулисами, так что я уверен, что это возможно.

На какие библиотеки я должен ссылаться и какие варианты я должен передать, чтобы он работал?

В настоящее время я получаю следующую ошибку, если я пытаюсь require моя библиотека:

SyntaxError: Unexpected token ILLEGAL

Ответы [ 2 ]

8 голосов
/ 13 июля 2011

Наконец нашел ответ.

Обязательные флаги компилятора:

g++ 
    -g 
    -fPIC 
    -DPIC 
    -D_LARGEFILE_SOURCE 
    -D_FILE_OFFSET_BITS=64 
    -D_GNU_SOURCE 
    -DEV_MULTIPLICITY=0 
    -I/usr/local/include/node 
    addon.cc 
    -c 
    -o addon.o

Флаги компоновщика:

g++ addon.o -o addon.node -shared -L/usr/local/lib

Примечание об импорте:

Общая библиотека должна иметь расширение .node, например: foobar.node

3 голосов
/ 14 октября 2011

Я не пробовал в Linux, но по крайней мере в OSX мне пришлось использовать -undefined suppress и -flat_namespace, так как node.js (v0.4.12) имеет свою собственную статически связанную библиотеку v8 в исполняемом файле.

Следующий Makefile компилирует mod.cpp в mod.node в MacOSX Lion:

all: mod.node
    node app.js

mod.o: mod.cpp
    g++ -g -fPIC -DPIC -D_LARGEFILE_SOURCE -m64 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DEV_MULTIPLICITY=0 -I/usr/local/include/node mod.cpp -c -o mod.o

mod.node: mod.o
    g++ -flat_namespace mod.o -o mod.node -undefined suppress -bundle -L/usr/local/lib

clean:
    rm mod.o
    rm mod.node

$ file mod.o

mod.o: Mach-O 64-bit object x86_64

$ file mod.node

mod.node: Mach-O 64-bit bundle x86_64

Бег делает:

node app.js
{ hello: 'World' }

Примечание: Исходный код mod.cpp из учебника Addons

...