0

我正在制作一个 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)

这就是我卡住的地方。

4

1 回答 1

1

您可以毫无问题地在节点(C++)中使用/包装 C 库。

就框架而言,您应该能够将这些文件添加libraries到您的 binding.gyp 文件中,并且 gyp 应该自动将它们转换为-framework lib67xx -framework libDIO96 ...链接器标志。

于 2014-05-20T13:49:38.467 回答