nodejs使用addons调用c++初体验

不会非的猪      2022-02-09     702

关键词:

纠结很久,决定写一点遇到的“坑”。

基础环境:win7-64bit  node(v7.5.0)   这些安装实在是太方便了,自行准备吧。

1. 安装 python(2.7.x ),用npm安装 node-gyp(3.5.0),创建一个文件夹来存放 binding.gyp hello.cc test.js

 binding.gyp 内容如下:

1 {
2   "targets": [
3     {
4       "target_name": "hello",
5       "sources": [ "hello.cc" ]
6     }
7   ]
8 }
View Code

hello.cc  内容如下:

 1 #include <v8.h>
 2 #include <node.h>
 3 
 4 using namespace node;
 5 using namespace v8;
 6 
 7 void Method(const v8::FunctionCallbackInfo<v8::Value>& args) {
 8 v8::Isolate* isolate = args.GetIsolate();
 9 v8::HandleScope scope(isolate);
10 args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "Hello world"));
11 }
12 
13 void init(v8::Local<v8::Object> target) {
14 NODE_SET_METHOD(target, "hello", Method);
15 }
16 
17 NODE_MODULE(binding, init);
View Code

test.js 内容如下:

var addon = require('./build/Release/hello');
console.log(addon.hello());  
View Code

2. 直接执行 node-gyp configure build 

3.尝试运行一下吧

 

补充:

node-gyp configure 如果失败就多尝试几次,毕竟有些站点链接太慢

node-gyp build 失败的话,对比一下 hello.cc (格外注意,hello.cc 以后可能编译不通过,随时关注一下 v8 ,及时修改一下)

 

typescript之面向对象初体验

1、安装nodejs和vscode:nodejs: https://nodejs.org/en/VisualStudioCode: https://www.visualstudio.com/en-us/products/code-vs.aspx安装是很简单的,一路next就行,此处不详细描述。检验node是否安装成功,打开命令行,输入node-v,显示如下图,说明安... 查看详情

从 Node.js 调用 C++ 库(Node addons / node-ffi)

...应用程序中。经过大量研究,我的选择减少到:写Nodeaddon使用node-ffi从node-ffi的gitHub的 查看详情

记录开发nodejsc++addon的一些经验(技术栈)

Nodejsc++addon是用c++去编写Nodejs的插件技术栈:1、node-gyp  一个用于把c++文件编译成node可执行文件的库2、v8  googlev8引擎用于处理c++的数据类型和node的数据类型的转换3、nan  相当于对v8做了一层封装,去处理v8不同版本兼容... 查看详情

springcloud初体验

...成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有点数据中心的概念)然后去调用客户端各个的应用.1、注册端代码:直接创建maven项目:pom.xml<?xmlversion="1.0"encoding="UTF-8"?><project 查看详情

类及对象初体验(代码片段)

一、类创建classAnimal:defsetName(self,name):self.name=namedefgetName(self):returnself.name#创建动物猫的对象cat=Animal()cat.setName("cat")#调用cat对象的属性nameprint(cat.name)#调用cat方法的getName方法print(cat.getName())#调用cat方法 查看详情

nodejs的c ++插件中的预期类名

】nodejs的c++插件中的预期类名【英文标题】:expectedclassnameinc++addonfornodejs【发布时间】:2018-08-0308:04:37【问题描述】:我正在为nodejs开发一个c++插件。这是一个概率过滤器。我需要做的是将现有的c++库绑定到nodejs。我按照https://n... 查看详情

rn初体验(代码片段)

react-native需要的工具1.nodejs2.rncli3.xcodeandas----------------打开终端,切换到根路径(mac中修改npm的默认安装来源)一、open.npmrc(会提示找不到该文件,没关系)二、npmconfigsetregistryhttps://registry.npm.taobao.org三、再次跳到步骤一,就能看... 查看详情

结对编程初体验——代码复审(代码片段)

这一次和室友结对编程,第一项任务就是互看代码。想到上一次这样认真看她的C++代码,是一年前学程序设计这门课时,帮她人工debug。虽然都是从头到尾认真读代码、通逻辑,感觉却是不同的,之前的关注点是bug在哪,而现在... 查看详情

接口测试初体验

...个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。程序内部的接口:方法与方法之间 查看详情

activemq初体验

首先介绍下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送。下面介绍主题,就是今天为大家介绍的ActiveMQ:他是Apache出品的一个开源的消息队列... 查看详情

10分钟学会less开发环境搭建与初体验

...看一下,10分钟能不能手把手快速教会你Less环境搭建以及使用入门。Less环境搭建:1)、安装nodejs。打开命令提示符(win+r),分别输入node-v以及npm-v如果返回版本号说明你安装成功了2)、安装less。在“命令提示符”下运行命令“... 查看详情

dubbogo初体验(代码片段)

Dubbo作为流行的RPC远程调用框架,在3.0之前由于自定义通讯协议,导致跨语言RPC调用比较麻烦。Dubbo3.0采用Triple协议,由于兼容GRPC协议,因此天然地支持跨语言的RPC调用。DubboGo是Dubbo技术团队在golang语言中的实现&#... 查看详情

selenium+phantomjs使用初体验

抓取使用Ajax技术完成的网页内容时可以使用Selenium+PhantomJS技术1.pipinstallselenium2.下载Phantomjs不需要用pip 武汉科技大学首页有一块使用js异步加载的网页内容,如图 抓取这一块内容的思路是:判断这一块是否加载完毕;selen... 查看详情

recyclerview初体验

目录:1.基本使用2.ItemDecoration  Item分割线3.LayoutManager  4.ItemAnimator   Item动画5.ClickandLongClick  Item点击事件--------------------1.基本使用RecyclerView的使用中最重要的是Adapter,Adapter中最重要的是ViewHolder。先看最简单的Recycler... 查看详情

mongoose初体验(代码片段)

什么是Mongoose?  Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDBnodejs驱动,可以在异步的环境下执行。同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用... 查看详情

qt初体验

...新建一个窗口的类,然后在当前类中创建这个类的对象,调用Show()函数显示出新窗口,close()函数关闭当前窗口  实现的方式大概就是下面这个样子:ui2=newSelect();ui2->show();this->close();  接下来说一下创建新的窗口类... 查看详情

使用dockerforwindows初体验

这是第二次使用DockerforWindows了。最近准备研究一下Docker的一些高级特性如SwarmClusters,需要用到docker-machine,docker-machine目前仅支持Mac或Windows,由于没有Mac所以需要在Windows上运行Docker。官方声称DockerforWindows是一个在Windows系统中... 查看详情

springmvc的初体验-3

一.SpringMVC对ServletAPI的支持使用ServletAPI主要是想使用HttpServletRequestrequest和HttpServletResponseresponse以及HttpSessionsession。控制层Controller@Controller@RequestMapping("/user")publicclassUserController@RequestMa 查看详情