关于node-gyp如何进行编译,我想它的官网已经说的很详细了:

https://github.com/nodejs/node-gyp

但是我感觉关于binding.gyp文件的语法规则还是说的不明确,大概是因为它本身也不属于node-gyp的范畴吧

gyp文件的语法规则的官方文档应该是这个:https://code.google.com/p/gyp/wiki/GypLanguageSpecification

但是由于墙的原因,所以无法打开,国内我从网上找的比较好的文档是这个:

http://www.cnblogs.com/x_wukong/p/4829598.html

大部分配置都能找到。

在这里我主要说下以下两个问题:

一、引入第三方头文件和库文件

我以引入boost这个库为例,头文件的引入通过设置 include_dirs 而库的引入通过设置 link_settings。

配置文件如下:

{
"variables": {
"boost_dir": "D:/boost_1_65_1",
"boost_lib": "D:/boost_1_65_1/stage/vc14-x64/lib/"
},
"targets": [
{
"target_name": "addon",
"sources": [ "addon_boost.cpp" ],
"include_dirs": [
"<!(node -e \"require('nan')\")",
"<(boost_dir)"
],
"link_settings": {
"libraries": [
"<(boost_lib)/libboost_filesystem-vc140-mt-s-1_65_1.lib",
"<(boost_lib)/libboost_system-vc140-mt-s-1_65_1.lib"
]
}
}
]
}

二、关于编译的架构(也就是系统位数)问题
node-gyp 提供 --arch 参数去支持编译成不同位数的addon, ia32表示32位,x64表示64位。

在编译的时候需要注意你引入的第三方库是32位的还是64位的,我之前引入的boost库是32位的,然后我用node-gyp去按照64位去编译结果就报错了。

除此之外,还需要你的node位数和你的addon位数保持一致,否则无法用node执行该文件。

总结一下:就是需要c++的源文件里引入的第三方库 和 node-gyp 和 node 这三个位数保持一致。

最后附上我的项目地址:

https://github.com/kwzm/node-iofile-addon

记录开发Nodejs c++ addon的一些经验(三、关于node-gyp)的更多相关文章

  1. 记录开发Nodejs c++ addon的一些经验(一、技术栈)

    Nodejs c++ addon 是用c++去编写Nodejs的插件 技术栈: 1.node-gyp 一个用于把c++文件编译成node可执行文件的库 2.v8 google v8引擎 用于处理c++ ...

  2. 记录开发Nodejs c++ addon的一些经验(四、electron)

    如果我们要在electron里使用我们开发的addon,那么直接使用是不行的. 官方的解释是:Electron 同样也支持原生模块,但由于和官方的 Node 相比使用了不同的 V8 引擎,如果你想编译 ...

  3. 记录开发Nodejs c++ addon的一些经验(二、数据类型的转换(尤其是Buffer))

    常见的数据类型的转换基本比较容易,结合nan应该不是一件难事 参考链接: http://blog.jobbole.com/109598/ http://deadhorse.me/nodejs/2012 ...

  4. iOS开发中你是否遇到这些经验问题

    前言 小伙伴们在开发中难免会遇到问题, 你是如何解决问题的?不妨也分享给大家!如果此文章其中的任何一条问题对大家有帮助,那么它的存在是有意义的! 反正不管怎样遇到问题就要去解决问题, 在解决问题的同时 ...

  5. 李洪强iOS开发本人集成环信的经验总结_09_处理好友请求

    李洪强iOS开发本人集成环信的经验总结_09_处理好友请求 实现这种效果: 01 - 遵守处理好友请求的代理协议 02  - 设置代理 03 - 实现代理方法 04 - 实现代理中用到的方法 

  6. 李洪强iOS开发本人集成环信的经验总结_08_自动登录补充

    李洪强iOS开发本人集成环信的经验总结_08_自动登录补充 来到Appdelegate里面 01 - 遵守自动登录的代理协议 02 - 设置自动登录的代理 03 - 判断与实现  04 - 代理方法的 ...

  7. 李洪强iOS开发本人集成环信的经验总结_07_监听好友请求

    李洪强iOS开发本人集成环信的经验总结_07_监听好友请求 来到Appdalegate中: 遵守代理协议 设置代理  实现监听好友请求的回调的方法

  8. 李洪强iOS开发本人集成环信的经验总结_06_发送好友请求

    李洪强iOS开发本人集成环信的经验总结_06_发送好友请求 同步好友请求 异步好友请求

  9. 李洪强iOS开发本人集成环信的经验总结_03_注册

    李洪强iOS开发本人集成环信的经验总结_03_注册 环信一共提供了三种注册的方法:  01 同步注册:  02 异步注册:  03 - 使用代理回调进行注册,但是3.0没有了,3.0之前有  调用注册 ...

随机推荐

  1. ES6(二) 函数

    箭头函数 是简写,不要function 1.如果有且仅有一个参数,()可以不写 2.如果有且仅有一条语句,而且是return,{}也可以不写 let arr=[12,23,5,6] // arr.so ...

  2. 原始MAC地址

    D8CB8AD97D47

  3. UICollectionView 自定义横向排版

    .h #import <UIKit/UIKit.h> @interface JHCollectionViewFlowLayout : UICollectionViewFlowLayout ...

  4. python(unittest)报告导出(一):使用HTMLTestRunner导出

    (前提:HTMLTestRunner.py放在python安装目录的Lib文件夹下) 一般将HTMLTestRunner.py文件放入需要引用的目录下,但这个太过于局限,仅对当前项目有用,所以可以将H ...

  5. java中的Lamdba表达式和Stream

    基于JDK 1.8 1.循环: // 以前的循环方式 for (String player : players) { System.out.print(player + "; ") ...

  6. 「Nosql」Redis小记-内存解析&内存消耗篇

    *博客搬家:初版发布于 2017/08/12 18:32    原博客地址:https://my.oschina.net/sunqinwen/blog/1507171 Redis内存消耗分析 注:本文 ...

  7. 01背包--hdu2639

    hdu-2639 The title of this problem is familiar,isn't it?yeah,if you had took part in the "Rooki ...

  8. TomCat端口被占用问题

    TomCat在使用时,有时会爆出端口被占用的问题 解决方法: 1.快捷键win+R,输入cmd,点击回车后再输入netstat -ano|findstr 8005 注:什么端口被占用就输入什么端口号 ...

  9. Unity QualitySettings.shadows 阴影

    QualitySettings.shadows 阴影 public static ShadowQuality shadows; Description 描述: 要使用的实时阴影类型. 这就决定了应该使 ...

  10. SQL操作Json数据

    转载自: http://blog.csdn.net/yapingxin/article/details/16913275 有小改动.. 支持复杂结构的使用.. 使用Parent_ID来对应Object ...