關(guān)于使用最新版Electron(5.0.5)調(diào)用C++插件遇到的一些問(wèn)題

最近因公司業(yè)務(wù)所需,研究起了Electron磅废,其他一起都還順利,但在調(diào)用C++這卡住了荆烈。

通過(guò)官方文檔提供的方式編譯生成了.node文件拯勉,官方文檔地址:https://nodejs.org/api/addons.html(英文版可能需要翻墻,中文版內(nèi)容不準(zhǔn))

在使用.node時(shí)憔购,一直出現(xiàn)如下錯(cuò)誤:

App threw an error during load

Error: The module '\\?\D:\work\src\electron\electron-quick-start\Addon\addon.node'

was compiled against a different Node.js version using

NODE_MODULE_VERSION 72. This version of Node.js requires

NODE_MODULE_VERSION 70. Please try re-compiling or re-installing

the module (for instance, using `npm rebuild` or `npm install`).

看字面意思是版本號(hào)不對(duì)宫峦,我仔細(xì)對(duì)了下我的nodejs版本號(hào)與Electron要求的版本號(hào),沒(méi)錯(cuò)啊都是12.0.0玫鸟,問(wèn)題在哪呢导绷?

后來(lái)我仔細(xì)閱讀Electron官方提供的資料,看到如下一段屎飘,鏈接:https://electronjs.org/docs/tutorial/using-native-node-modules#%E4%BD%BF%E7%94%A8-node-%E5%8E%9F%E7%94%9F%E6%A8%A1%E5%9D%97


順著這個(gè)方向妥曲,又看到如下內(nèi)容,鏈接:https://electronjs.org/docs/development/upgrading-node


再接著找到如下內(nèi)容钦购,鏈接:https://github.com/electron/node

這下終于明白了檐盟,原來(lái)Electron使用的Nodejs是自己內(nèi)部的版本,所以只要使用nodejs官方發(fā)布版去編譯的C++插件都會(huì)出現(xiàn)這個(gè)問(wèn)題押桃。

后來(lái)我把Electron分支Nodejs代碼下下來(lái)看葵萎,發(fā)現(xiàn)有一段代碼是去比對(duì)NODE_MODULE_VERSION這個(gè)版本號(hào)是否一致,如果不一致則會(huì)拋出以上錯(cuò)誤

要解決這個(gè)問(wèn)題唱凯,我想到了兩個(gè)辦法:

1.使用Electron分支下的nodejs版本代碼去編譯并使用羡忘,這個(gè)比較復(fù)雜,我沒(méi)試過(guò)磕昼。

2.手動(dòng)改寫(xiě)插件版本號(hào)卷雕,這個(gè)簡(jiǎn)單。

下面介紹下第二種方法:

我們自行編譯.node插件時(shí)掰烟,引用到了AppData\Local\node-gyp\Cache\xxx\include\node目錄下的node_version.h文件爽蝴,文件中有NODE_MODULE_VERSION版本號(hào)的定義沐批,將這個(gè)版本號(hào)改成和Electron使用的版本號(hào)一致,再編譯使用方可通過(guò)蝎亚。

如果不確定node_version.h文件位置的九孩,可以用vs打開(kāi)build生成的工程文件,利用vs找到NODE_MODULE宏定義发框,這時(shí)會(huì)跳到node.h頭文件躺彬,接著找NODE_MODULE_X的定義,這時(shí)就會(huì)跳到node_version.h文件就能找到NODE_MODULE_VERSION的定義了梅惯。

注意宪拥,這么改有風(fēng)險(xiǎn),因?yàn)镋lectron內(nèi)嵌的Nodejs在官方發(fā)布版的基礎(chǔ)上做過(guò)改動(dòng)铣减,所以盡量選擇使用版本號(hào)差別不大并且v8的版本兼容的nodejs版本她君,或者對(duì)比官方代碼,了解改動(dòng)差別葫哗,主要接口沒(méi)變的話基本就沒(méi)啥問(wèn)題缔刹。

因?yàn)榭傆X(jué)的以上方案不靠譜,在網(wǎng)上翻遍各種資料劣针,終于找到完美解決方案校镐,

node-gyp rebuild --target=5.0.5 --arch=ia32 --dist-url=https://npm.taobao.org/mirrors/atom-shell

--target指定electron版本號(hào)

--dist-url指定頭文件下載地址,原答案這個(gè)值寫(xiě)的是https://atom.io/download/electron捺典,國(guó)內(nèi)的話不管用

加上這幾個(gè)的意思從指定地址下載相應(yīng)electron版本的頭文件鸟廓,然后用下載的頭文件進(jìn)行編譯,下下來(lái)的頭文件便是electron修改過(guò)的nodejs版本襟己。

來(lái)自:

https://newsn.net/say/electron-gyp-param.html

https://www.cnblogs.com/mdorg/p/10417945.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末引谜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稀蟋,更是在濱河造成了極大的恐慌煌张,老刑警劉巖呐赡,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件退客,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡链嘀,警方通過(guò)查閱死者的電腦和手機(jī)萌狂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怀泊,“玉大人茫藏,你說(shuō)我怎么就攤上這事∨恚” “怎么了务傲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵凉当,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我售葡,道長(zhǎng)看杭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任挟伙,我火速辦了婚禮楼雹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尖阔。我一直安慰自己贮缅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布介却。 她就那樣靜靜地躺著谴供,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齿坷。 梳的紋絲不亂的頭發(fā)上憔鬼,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音胃夏,去河邊找鬼轴或。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仰禀,可吹牛的內(nèi)容都是我干的照雁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼答恶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饺蚊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起悬嗓,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤污呼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后包竹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體燕酷,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年周瞎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苗缩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡声诸,死狀恐怖酱讶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彼乌,我是刑警寧澤泻肯,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布渊迁,位于F島的核電站,受9級(jí)特大地震影響灶挟,放射性物質(zhì)發(fā)生泄漏宫纬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一膏萧、第九天 我趴在偏房一處隱蔽的房頂上張望漓骚。 院中可真熱鬧,春花似錦榛泛、人聲如沸蝌蹂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孤个。三九已至,卻和暖如春沛简,著一層夾襖步出監(jiān)牢的瞬間齐鲤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工椒楣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留给郊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓捧灰,卻偏偏與公主長(zhǎng)得像淆九,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毛俏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容