在node-webkit中使用ffi报错的问题

一般情况下我们需要用到调试工具debug;我们到官网下载可以用于调试的版本http://nwjs.io/

下载之后解压等造作参考之前的文章;然后在代码中添加

var gui = require('nw.gui');

var win = gui.Window.get();

win.showDevTools();

就可以打开调试窗口

接下来是我们使用ffi的时候除了一点儿错

在项目中安装ffi

npm install ffi

在index.html中的js代码中添加

var FFI = require('ffi');

function TEXT(text){

return new Buffer(text, 'ucs2').toString('binary');

}

var user32 = new FFI.Library('user32', {

'MessageBoxW': [

'int32', [ 'int32', 'string', 'string', 'int32' ]

]

});

var OK_or_Cancel = user32.MessageBoxW(

0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1

);

添加了这些代码的时候报错,信息大致是在binding.js中加载动态库失败

3818:0701/012531:INFO:CONSOLE(83)] “Uncaught Error: /tmp/.org.chromium.Chromium.zU7siC/node_modules/ref/build/Release/binding.node: undefined symbol: _ZN2v82V817IsGlobalNearDeathEPPNS_8internal6ObjectE”, source: /tmp/.org.chromium.Chromium.zU7siC/node_modules/ref/node_modules/bindings/bindings.js (83)

解决方案是在全局先安装nw-gyp

npm install -g nw-gyp

然后进行下面的操作

进入ffi模块运行下面命令 nw-gyp rebuild --target=0.17.5

进入ref模块运行 nw-gyp rebuild --target=0.17.5

target是你的nw的版本,查看版本可以直接双击nw.exe右下角会有显示;或者你是下的什么版本就是什么版本,比如你到官网看到的是v0.17.5

这里的target就是0.17.5

之后再运行你的项目就可以了

推荐阅读更多精彩内容