• 记录开发Nodejs c++ addon的一些经验(三、关于node-gyp)


    关于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

  • 相关阅读:
    结对
    汉堡 结对2.0
    《构建之法》第四章读后感
    复利计算单元测试
    实验一 命令解释程序的编写
    《构建之法》读后感
    复利计算 2.0
    了解和熟悉操作系统
    学习进度条
    perl的贪婪和非贪婪模式
  • 原文地址:https://www.cnblogs.com/kwzm/p/7596971.html
Copyright © 2020-2023  润新知