我正在制作一个 nodejs 应用程序,它必须从 NI USB 6210 中提取数据。 National Instruments 提供了一堆使用他们(纯)C 库的示例,因为我在 nodejs 上,我想我可以“轻松" 使用 node-gyp 将它们回收到节点模块中,但我发现节点模块更有可能用 C++ 编写,而不是纯 C(如参考中所述),所以我想知道其他可能的解决方案。除此之外,整个库的东西也基于一堆框架(在 OSX 上)
/Library/Frameworks/nidaqmxbase.framework
/Library/Frameworks/nidaqmxbaselv.framework
/Library/Frameworks/lib67xx.framework
/Library/Frameworks/libDIO96.framework
/Library/Frameworks/libESeries.framework
/Library/Frameworks/libmiteDma.framework
/Library/Frameworks/libMSeries.framework
/Library/Frameworks/libSSeries.framework
/Library/Frameworks/libUSB-92xx.framework
所以我的第二个问题是框架如何与 nodejs 交互?我对此有点困惑。
更新
感谢@mscdex,我构建了我的第一个节点模块,它应该只包装框架并使它们在节点端可用。这是我到目前为止所做的:
绑定.gyp
{
"targets": [
{
"target_name": "addon",
"sources": [
],
"include_dirs": [
"./includes/NIDAQmxBase.h"
],
"conditions": [
[
"OS=='mac'",
{
"defines": [
"__MACOSX_CORE__"
],
"architecture": "i386",
"link_settings": {
"libraries": [
"-framework",
"nidaqmxbase",
"-framework",
"nidaqmxbaselv"
]
}
}
]
]
}
]
}
有了这个我已经运行了配置和构建命令
需要注意的是,我使用的是nw-gyp,它是 node-gyp 的 hack,因为我需要为 node-webkit 构建一个模块,但它就像 node-gyp 一样,有一些改进。
该操作生成了一个名为 addon.node 的文件(加权 8kb)
之后我尝试运行一个简单的 js 测试文件
var ni = require('./libs/addon');
console.log(ni);
当我运行它时,它产生了
Error: Symbol addon_module not found.
at Module.load (module.js:352:32)
at Function.Module._load (module.js:308:12)
at Module.require (module.js:360:17)
at require (module.js:376:17)
at window.require (eval at undefined, <anonymous>:1:112)
at eval (file:///Users/myUser/MyPath/MyNodeWebkitProject/public/js/ni-daqmx.js:1:10)
这就是我卡住的地方。