用C++编写扩展node.js(node-ffi版)

用C++扩展node.js(node-ffi版)

0.先安装node.js和python(2.7)。请参考:

https://nodejs.org/
https://www.python.org

1.新建一个demo项目: 创建demo目录,并进入其中,然后运行下面命令。

mkdir demo
cd demo
npm init

运行npm init时,之后会生成一个package.json(具体内容与输入参数有关):

{
 "name": "demo",
 "version": "1.0.0",
 "description": "a demo for node call native functions",
 "main": "demo.js",
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [
  "node"
 ],
 "author": "Li XianJing",
 "license": "ISC"
}

2.安装编译工具和头文件。

sudo npm install -g node-gyp
npm install ffi bindings --save

3.用C++编写原生代码( 为了让目录结构整洁一点,我们把代码放到native只目录下)。

下面的文件(native/demo.cc),添加一个Add方法,计算两个数之和:

double Add(double a, double b) {
  return a+b;
}

4.写一个Makefile(native/Makefile), 用来编译C++代码。

all:
  $(CC) -g -shared demo.c -o libdemo.dylib
clean:
  rm -frv libdemo*

5.编写一个JS文件(demo.js)),让它调用原生代码。

var ffi = require('ffi');
var demo = ffi.Library('./native/libdemo', {
 'Add': [ 'double', [ 'double', 'double'] ]
});
console.log(demo.Add(12345, 54321));

7.编译C++程序。

make -C native

8.运行JS代码,看看是否工作。

node demo.js

参考:

node-ffi

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 用C/C++来实现 Node.js 的模块(二)

    温故而知新,可以为湿矣 首先请大家记住这个 V8 的在线手册--http://izs.me/v8-docs/main.html. 还记得上次的 building.gyp 文件吗? 复制代码 代码如下: {   "targets": [     {       "target_name": "addon",       "sources": [ "addon.cc" ]     }   ] } 就像这样,举一

  • 利用C/C++编写node.js原生模块的方法教程

    前言 一直想了解一下使用C/C++编写nodejs原生模块,从网上找到的博客,大多都停留在如何搭建环境,然后一个Hello World完事.连更多的参考资料也没有.于是就自己整理了一下,分享于此. 至于准备环境什么的,网上一抓一大把,就不再详述 . 主要参考两个地方: nodejs官方文档 v8文档 其中第一个是nodejs的官方文档,里面介绍了几个不错的参考例子. 第二个是v8引擎的文档,c++的,编写c++模块主要看这个文档. 好了,我们开始几个例子,逐步的了解如何使用c++编写nodejs

  • 使用C++为node.js写扩展模块

    前提: 安装好node.js.Python2.7与visual studio 2013. 过程: 首先安装GYP项目生成工具,npm install -g node-gyp . 建立test目录,这是我们的工作目录,在此目录下再建一个src目录,用来存放C++源代码,另新建一个名为binding.gyp的文本文件,这是gyp的项目文件,内容如下: 复制代码 代码如下: {     'targets':[{         'target_name':'hello',         'sourc

  • node.js调用C++函数的方法示例

    目前nodejs调用c++主流的有两种方法,分别是addons和ffi addons是nodejs官方的c++扩展实现方案,但是由于需要使用模版,并且要对v8引擎有一定的了解,入门门槛较高. ffi是nodejs直接调用so库的一种实现,可以调用纯c的接口. 要想node.js调用C++的函数等,须先将C++代码编译成二进制的.node文件.node.js官方文档https://nodejs.org/dist/latest-v8.x/docs/api/addons.html中的C++ addon

  • 用C/C++来实现 Node.js 的模块(一)

    N久之前的一个坑--用 Node.js 来重构 NBUT 的 Online Judge,包括评测端也得重构一遍.(至于什么时候完成大家就不要关心了,(/‵Д′)/~ ╧╧ 总之我们现在要做的其实简而言之就是--用C/C++来实现 Node.js 的模块. 准备工作 工欲善其事,必先~~耍流氓~~利其器. node-gyp 首先你需要一个 node-gyp 模块. 在任意角落,执行: 复制代码 代码如下: $ npm install node-gyp -g 在进行一系列的 blahblah 之后,

  • Node.js Addons翻译(C/C++扩展)

    PS:请先升级Node 6.2.1,Node 升级命令 npm install -g n;n stable.NOde.js扩展是一个通过C/C++编写的动态链接库,并通过Node.js的函数require()函数加载,用起来就像使用一个普通的Node.js模块.它主要为Node与C/C++库之间提供接口. 这样,若一个方法或函数是通过Node扩展实现则变得相当复杂,涉及几个模块与接口的知识: •v8:一个实现了通过C++库实现了的javascript.V8提供了创建对象机制,回调函数等.V8AP

  • node.js调用C++开发的模块实例

    如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node.先回顾一下正统的用 C++ 开发 native 模块的方法 #include <node.h> #include <v8.h> using namespace v8; // 这里是 hello 函数的 C++ 实现部分 Handle<Value> Method(const Arguments& args

  • Node.js基础入门之使用方式及模块化详解

    目录 什么是Node.js ? Node.js下载 Node.js和JavaScript的区别 Node.js安装与验证 Node.js使用方式 1. REPL模式 2. 文件模式 Node.js模块化 1. 什么是模块? 2. 模块分类 3. 创建自定义模块 4. 调用自定义模块 5. 模块测试 6. 主模块 7. 模块组成 在这个竞争日益激烈的今天,已经不是一门语言,一项技术走天下的时代了.正所谓艺多不压身,今天开始学习Node.js,学而时习之,不亦乐乎,希望可以借鉴经验,学以致用,如有不

  • 卸载安装Node.js与npm过程详解

    下面记录一下在本地 Windwos 环境用 vagrant 搭建的虚拟机(Homestaead)和生产环境阿里云 CentOS 系统安装 Node.js 的步骤,以及 npm 安装依赖的不同之处. 使用源码编译的方式安装 node.js.首先将机子上的 Node.js 卸载,我直接贴上 Stack Overflow 上提供的步骤: 1.卸载 npm 和 Node.js 先卸载 npm,命令是:sudo npm uninstall npm -g,然后卸载 Node.js. Running whic

  • Node.js如何响应Ajax的POST请求并且保存为JSON文件详解

    实现目的 使用D3.js开发的前端应用,用户与图交互更改图的内容后,如何在下一次加载的显示上一次最后交互的内容? 本文提供通过后端的Node.js程序提供一种最小化方案,作为参考. 开发环境 后端:Node.js Node.js模块:Express.body-parser.fs 前端:JQuery 后端 1.安装nodejs,装好后用显示版本号确认是否安装好 node --version 2.新建一工程目录(文件夹),安装模块. npm install express npm install b

  • 如何在Linux上安装Node.js

    Node.js 是建立在谷歌的 V8 JavaScript 引擎服务器端的软件平台上.在构建高性能的服务器端应用程序上,Node.js 在 JavaScript 中已是首选方案.是什么让使用 Node.js 库和应用程序的庞大生态系统来开发服务器后台变得如此流行.Node.js 自带一个被称为 npm 的命令行工具可以让你轻松地安装它,进行版本控制并使用 npm 的在线仓库来管理 Node.js 库和应用程序的依赖关系. 在本教程中,我将介绍 如何在主流 Linux 发行版上安装 Node.js

  • 浅谈Node.js 中间件模式

    中间件在 Node.js 中被广泛使用,它泛指一种特定的设计模式.一系列的处理单元.过滤器和处理程序,以函数的形式存在,连接在一起,形成一个异步队列,来完成对任何数据的预处理和后处理. 它的优点在于 灵活性 :使用中间件我们用极少的操作就能得到一个插件,用最简单的方法就能将新的过滤器和处理程序扩展到现有的系统上. 常规中间件模式 中间件模式中,最基础的组成部分就是 中间件管理器 ,我们可以用它来组织和执行中间件的函数,如图所示: 要实现中间件模式,最重要的实现细节是: 可以通过调用use()函数

  • 用C++编写扩展node.js(node-ffi版)

    用C++扩展node.js(node-ffi版) 0.先安装node.js和python(2.7).请参考: https://nodejs.org/ https://www.python.org 1.新建一个demo项目: 创建demo目录,并进入其中,然后运行下面命令. mkdir demo cd demo npm init 运行npm init时,之后会生成一个package.json(具体内容与输入参数有关): { "name": "demo", "

  • 使用Node.js为其他程序编写扩展的基本方法

     准备开始 首先我们用下面的目录结构来创建一个节点通知(node-notify)文件夹.   复制代码 代码如下: . |-- build/                   # This is where our extension is built. |-- demo/ |   `-- demo.js              # This is a demo Node.js script to test our extension. |-- src/ |   `-- node_gtkno

  • 使用coffeescript编写node.js项目的方法汇总

    Node.js 基于JavaScript编写应用,JavaScript是我的主要开发语言.CoffeeScript是编译为JavaScript的编程语言.其实CoffeeScript语言因其可以一对一的翻译为JavaScript的特性,使用起来也非常灵活.将其引入项目的方式也有很多种,在此,我将使用coffeescript编写node.js项目的方法做一个汇总. 直接使用coffee指令运行纯coffeescript项目 一般提起coffeescript,自然而然地会想到他是javascript

  • Node.js插件的正确编写方式

    Node.js在利用JavaScript编写后端方面效果拔群,值得我们多加尝试.不过如果大家需要一些无法直接使用的功能甚至是根本无从实现的模块使用,那么能否从C/C++库当中引入此类成果呢?答案是肯定的,大家要做的就是编写一款插件,并借此在自己的JavaScript代码中使用其它代码库的资源.下面我们就一同开始今天的探询之旅. 介绍 正如Node.js在官方说明文档中所言,插件是以动态方式进行链接的共享式对象,能够将JavaScript代码与C/C++库接驳起来.这意味着我们可以引用任何来自C/

随机推荐