我尝试为在 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。
有人可以帮忙吗?