用node-gyp手动编译node的c++扩展模块

又踩坑了,配置永远比单纯的写代码要更花费时间。也更令人挫败。简单记一笔吧。

最近在弄的一个视频拼接的npm包,就有C++扩展,npm install 的时候屡屡不成功,后来总算成功了。实际引入的时候又找不到入口。排查了一下就是里面用到了C++扩展,需要重新编译。后来全局装了node-gyp对着报错把包一个个编译了一遍,终于成功了。

以下是一些知识点:

C/C++对比javascript在位运算上具有极大优势,很多转码、编码的功能可以用C/C++扩展来提升性能。

C++模块通过预先编译为.node文件,然后调用process.dlopen() 加载执行。.node文件实际上在不同平台下是不一样的。如图。

*nix                                |          windows
                                 C/C++源码
g++/gcc编译成.node文件(.so文件)       |          VC++编译成.node文件(.dll文件)
                            dlopen加载.node文件导出给javascript

gyp的意思是generate your projects。node-gyp是一个node的扩展构建工具,通过npm install -g node-gyp安装。写好.gyp项目编译文件后,它会自动按这个文件进行编译。该文件被约定为binding.gyp。一个简单的binding.gyp长这样:

{
"targets": [
    {
      "target_name": "hello",
      "sources": [ "src/hello.cc" ],
      "conditions:": [
         ["OS=='win'",{
           "libraries": ["-lnode.lib"]
         }]
      ]
    },
  ]
}

注意经常在手动编译的时候报错binding.gyp not found (cwd: /usr/local/bin),那是因为如果这个文件没有被down下来,你是要自己写的。。。可以参见下.cc文件头来写。千万记住要在有binding.gyp的文件夹下执行node-gyp命令!!!

调用node-gyp configure 会在当前目录中穿件Build目录并生成相关的项目文件,最后会报一个 gyp info ok。然后继续执行 node-gyp build编译,在linux下通过make,windows下通过vcbuild,编译完成后,.node文件就会出现在
build/Release 目录下。

也可以直接node-gyp rebuild, 这个命令相当于clean, configure, build的结合。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值