构建没有node-waf的node.js插件

发布于 2024-11-19 20:55:28 字数 347 浏览 5 评论 0原文

我正在使用 Eclipse CDT 用 C++ 编写一个简单的 node.js 插件。该项目有很多文件,我想使用 Eclipse 的托管构建系统。

我可以使用 node-waf 编译一个简单的插件示例,但我无法配置我的 Eclipse 工具链来构建没有 waf 的正确共享库。 Waf 在幕后使用 gcc,所以我确信这是可能的。

我应该链接到哪些库以及应该传递什么样的选项才能使其正常工作?

目前,如果我尝试 require 我的库,则会收到以下错误:

SyntaxError: Unexpected token ILLEGAL

I'm writing a simple node.js addon in C++ using Eclipse CDT. The project has many files and I'd like to use the Eclipse's managed build system.

I can compile a simple addon example with node-waf, but I can't configure my Eclipse toolchain to build a proper shared library without waf. Waf uses gcc behind the scenes, so I'm sure it's possible.

Which libs should I link to and what kind of options should I pass along to make it work?

Currently I get the following error if I try to require my lib:

SyntaxError: Unexpected token ILLEGAL

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音盲 2024-11-26 20:55:28

终于找到了答案。

所需的编译器标志:

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

Finally found the answer.

Required compiler flags:

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 flags:

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

Importand note:

The shared library must have the extension .node, e.g: foobar.node

甜宝宝 2024-11-26 20:55:28

我还没有在 Linux 中尝试过,但至少在 OSX 中我必须使用 -undefine subsup-flat_namespace 因为 node.js(v0.4.12) 有它自己的静态链接可执行文件中的 v8 库。

下面的 Makefile 在 MacOSX Lion 中将 mod.cpp 编译为 mod.node

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

运行 make:

node app.js
{ hello: 'World' }

注意: mod 的源代码。它来自 插件教程

I haven't tried in Linux but at least in OSX I had to use -undefined suppress and -flat_namespace since node.js(v0.4.12) has it's own statically linked v8 library in the executable.

The following Makefile compiles mod.cpp into mod.node in 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

Running make:

node app.js
{ hello: 'World' }

Note: The source code of mod.cpp it's from the Addons tutorial

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文