2011-07-12 10 views
6

Piszę prosty dodatek node.js w C++ za pomocą Eclipse CDT. Projekt ma wiele plików i chciałbym użyć systemu zarządzanego przez Eclipse.Build node.js addon bez węzła-waf

Mogę skompilować prosty przykład wtyczki z node-waf, ale nie mogę skonfigurować mojego zestawu narzędzi Eclipse do zbudowania właściwej biblioteki współdzielonej bez elementu gofrowego. Waf używa gcc za kulisami, więc jestem pewien, że to możliwe.

Do jakich bibliotek powinienem się podłączyć i jakie opcje powinienem podać, aby działało?

Obecnie otrzymuję następujący błąd, gdy próbuję require mój lib:

SyntaxError: Unexpected token ILLEGAL 

Odpowiedz

8

końcu znalazłem odpowiedź.

Wymagane flagi kompilatora:

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 

Linker flagi:

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

importand uwaga:

Wspólna biblioteka koniecznością mają rozszerzenie .node, np foobar.node

+0

To jest doskonałe. Używam clang ++, czy ktoś zna odpowiednie flagi do tego (na Lion) i (na Mavericks), jeśli to możliwe? – Dave

+0

Opcje klang są zwykle kompatybilne z gccs. – erenon

3

Nie próbowałem w Linuksie, ale przynajmniej w OSX musiałem używać -undefined suppress i -flat_namespace, ponieważ node.js (v0.4.12) ma swoją własną statycznie połączoną bibliotekę v8 w pliku wykonywalnym.

Poniższy Makefile kompiluje mod.cpp do mod.node w 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 

$ plik mod.o

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

$ plik mod.node

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

Running Marka:

node app.js 
{ hello: 'World' } 

Uwaga: Kod źródłowy mod.cpp to z Addons tutorial