1

我尝试为在 Windows 和 Linux 上运行的节点构建本机插件。我的插件需要访问 libnfc。我在 windows 和 linux 上编译了 libnfc(和依赖项)。在 Windows 上,我将以下文件复制到我的节点项目中:

“libnfc.dll”、“libnfc.lib”、“libusb.lib”、“libusb0.dll”(libnfc使用libusb)

我的 bindings.gyp 如下所示:

{
    "variables": {
    "build_files": ["libnfc.dll"]
    },
  "targets": [
    {
      "target_name": "addon",
      "sources": [ "addon.cc" ],

      "include_dirs": [
        "<!(node -e \"require('nan')\")",
        "./nfc_include"
      ],

      'conditions': [
        ['OS=="linux"', {
          'libraries': [
            '-lnfc'
          ]
        }],
        ['OS=="win"', {
          'libraries': [
            '-llibnfc'
          ]
        }]
      ]  
    }
  ]
}

我仍然无法正确链接到该库,因为搜索路径似乎是(经过一些尝试和错误)“项目目录/构建”。重建将删除该文件夹中的所有文件,因此我必须重新复制 .lib 文件,然后再次使用“node-gyp build”(而不是“rebuild”)。应该将设置文件复制到构建目录的“build_files”标志不起作用。

用这个技巧“node-gyp”成功地构建了我的插件。但试图运行它我得到以下错误:

D:\Projekte\iRobot\hg_mRobot\NodeJs\NfcEmulateModule\node_modules\bindings\bindings.js:83
        throw e
              ^
Error: no error
D:\Projekte\iRobot\hg_mRobot\NodeJs\NfcEmulateModule\build\Release\addon.node
    at Error (native)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at bindings (D:\Projekte\iRobot\hg_mRobot\NodeJs\NfcEmulateModule\node_modul
es\bindings\bindings.js:76:44)
    at Object.<anonymous> (D:\Projekte\iRobot\hg_mRobot\NodeJs\NfcEmulateModule\
addon.js:1:94)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)

D:\Projekte\iRobot\hg_mRobot\NodeJs\NfcEmulateModule>

其实我不知道是什么问题。我试图将“.lib”和“.dll”文件复制到我项目的任何文件夹中 - >没有变化。在 Linux 上它工作正常!我认为我在链接库时仍然做错了什么,或者模块找不到所需的 dll。

有人可以帮忙吗?

4

0 回答 0