NI-DAQmx C libs over nodejs

时间:2014-05-20 13:44:36

标签: node.js node-webkit nidaqmx

我正在制作一个必须从NI USB 6210提取数据的nodejs应用程序。 National Instruments,给出了大量使用其(纯)C库的示例, 因为,我在nodejs上,我以为我可以“轻松地”使用node-gyp将它们循环到节点模块中,但我发现节点模块更可能是用C ++编写的,而不是普通的C({{3} }),所以我想知道其他可能的解决方案。 除此之外,整个库的东西也基于一堆框架(在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我已经构建了我的第一个节点模块,它应该只在节点端包装框架和make'em。这就是我到目前为止所做的:

binding.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"
                            ]
                        }
                    }
                ]
            ]
        }
    ]
}

有了这个,我运行了configure和build命令

要注意我正在使用as described in the reference这是一个节点gyp的黑客,因为 我需要为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)

这就是我被困住的地方。

1 个答案:

答案 0 :(得分:1)

您可以在节点(C ++)中使用/包装C库,没有问题。

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