Water's Home

Just another Life Style

0%

Node.js C++ Addons

Install node-gyp

npm install -g node-gyp

Prepare SourceCode

[root@localhost test_nodejs]# ls
binding.gyp hello.cc hello.js

hello.cc

#include namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;

void Method(const FunctionCallbackInfo& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, “world”));
}

void init(Local exports) {
NODE_SET_METHOD(exports, “hello”, Method);
}

NODE_MODULE(NODE_GYP_MODULE_NAME, init)

} // namespace demo

hello.js

// hello.js
const addon = require(‘./build/Release/addon’);

console.log(addon.hello());
// Prints: ‘world’

binding.gyp

{
“targets”: [
{
“target_name”: “addon”,
“sources”: [ “hello.cc” ]
}
]
}

Compile & Test

[root@localhost test_nodejs]# node-gyp configure
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.2
gyp info using node@8.11.1 linux x64
gyp info spawn /usr/bin/python2
gyp info spawn args [ ‘/usr/local/node-v8.11.1-linux-x64/lib/node_modules/node-gyp/gyp/gyp_main.py’,
gyp info spawn args ‘binding.gyp’,
gyp info spawn args ‘-f’,
gyp info spawn args ‘make’,
gyp info spawn args ‘-I’,
gyp info spawn args ‘/mnt/hgfs/linux_tmp/test_nodejs/build/config.gypi’,
gyp info spawn args ‘-I’,
gyp info spawn args ‘/usr/local/node-v8.11.1-linux-x64/lib/node_modules/node-gyp/addon.gypi’,
gyp info spawn args ‘-I’,
gyp info spawn args ‘/root/.node-gyp/8.11.1/include/node/common.gypi’,
gyp info spawn args ‘-Dlibrary=shared_library’,
gyp info spawn args ‘-Dvisibility=default’,
gyp info spawn args ‘-Dnode_root_dir=/root/.node-gyp/8.11.1’,
gyp info spawn args ‘-Dnode_gyp_dir=/usr/local/node-v8.11.1-linux-x64/lib/node_modules/node-gyp’,
gyp info spawn args ‘-Dnode_lib_file=/root/.node-gyp/8.11.1/<(target_arch)/node.lib’,
gyp info spawn args ‘-Dmodule_root_dir=/mnt/hgfs/linux_tmp/test_nodejs’,
gyp info spawn args ‘-Dnode_engine=v8’,
gyp info spawn args ‘–depth=.’,
gyp info spawn args ‘–no-parallel’,
gyp info spawn args ‘–generator-output’,
gyp info spawn args ‘build’,
gyp info spawn args ‘-Goutput_dir=.’ ]
gyp info ok
[root@localhost test_nodejs]#
[root@localhost test_nodejs]# ls
binding.gyp build hello.cc hello.js
[root@localhost test_nodejs]# ls build/
addon.target.mk binding.Makefile config.gypi Makefile

[root@localhost test_nodejs]# node-gyp build
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.2
gyp info using node@8.11.1 linux x64
gyp info spawn make
gyp info spawn args [ ‘BUILDTYPE=Release’, ‘-C’, ‘build’ ]
make: Entering directory `/mnt/hgfs/linux_tmp/test_nodejs/build’
CXX(target) Release/obj.target/addon/hello.o
SOLINK_MODULE(target) Release/obj.target/addon.node
COPY Release/addon.node
make: Leaving directory `/mnt/hgfs/linux_tmp/test_nodejs/build’
gyp info ok

[root@localhost test_nodejs]# ls build/
addon.target.mk binding.Makefile config.gypi Makefile Release
[root@localhost test_nodejs]# ls build/Release/
addon.node obj.target

[root@localhost test_nodejs]# node hello.js
world