簡體   English   中英

使用 NODE_MODULE_VERSION 70 重建 nbind。而不是 NODE_MODULE_VERSION 48

[英]rebuild nbind with `NODE_MODULE_VERSION 70.` instead of NODE_MODULE_VERSION 48

我有以下電子項目 具有以下./src/index.js (我的應用程序啟動的地方):

const { app, BrowserWindow, ipcMain } = require('electron');
const nbind = require('nbind');
const lib = nbind.init().lib;
const myPromice= new lib.MyPromice();

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow;

const createWindow = () => {
  // Create the browser window.
  mainWindow = new BrowserWindow();
  mainWindow.setMenu(null);
  mainWindow.maximize();

  // and load the index.html of the app.
  mainWindow.loadURL(`file://${__dirname}/ui/index.html`);
  mainWindow.on('closed', () => {
    mainWindow = null;
  });

  MyPromice.exec();

};

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);

// Quit when all windows are closed.
app.on('window-all-closed', () => {
    app.quit();
});

app.on('activate', () => {
    createWindow();
});

我的package.json是:

{
  "name": "electron-cpp-bindings",
  "version": "1.0.0",
  "description": "A simple test using C++ bindings on an electron app",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "electron ./src/",
    "autogypi": "autogypi",
    "node-gyp": "HOME=~/.electron-gyp node-gyp --target=1.2.3 --arch=x64 --dist-url=https://electronjs.org/headers",
    "emcc-path": "emcc-path",
    "copyasm": "copyasm",
    "ndts": "ndts",
    "electron-version": "electron -v",
    "rebuild": "HOME=~/.electron-gyp electron-rebuild --version=70 --module-dir build"
  },
  "author": "Dimitrios Desyllas",
  "license": "MIT",
  "devDependencies": {
    "electron": "^5.0.8",
    "electron-rebuild": "^1.8.5"
  },
  "dependencies": {
    "autogypi": "^0.2.2",
    "nbind": "^0.3.15",
    "node-gyp": "^5.0.3"
  }
}

我的綁定由這些文件組成:

  • src/cpp/promice.h :

#ifndef PROMICE
#define PROMICE

class MyPromice {
    public:
        MyPromice(){};
        ~MyPromice(){};
        void exec();
};
#endif
  • src/cpp/promice.cpp
#include"promice.h"

#include <iostream>
#include <thread>
#include <chrono>

void MyPromice::exec(){
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    std::cout << "Executing Code" << std::endl;
}

#include "nbind/nbind.h"

NBIND_CLASS(MyPromice) {
  method(exec);
}

我嚴格按照以下 說明安裝要求,以便使用電子構建本機模塊:

# Electron's version.
export npm_config_target=1.2.3
# The architecture of Electron, see https://electronjs.org/docs/tutorial/support#supported-platforms
# for supported architectures.
export npm_config_arch=x64
export npm_config_target_arch=x64
# Download headers for Electron.
export npm_config_disturl=https://electronjs.org/headers
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
# Tell node-pre-gyp to build module from source code.
export npm_config_build_from_source=true
# Install all dependencies, and store cache to ~/.electron-gyp.
HOME=~/.electron-gyp npm install

然后我運行:

./node_modules/.bin/electron-rebuild

這成功地構建了我的模塊:

✔ Rebuild Complete

此外,如果我運行以下命令序列:

npm run -- node-gyp \
  configure build

我成功構建它:

>   configure build

> electron-cpp-bindings@1.0.0 node-gyp /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings
> HOME=~/.electron-gyp node-gyp --target=1.2.3 --arch=x64 --dist-url=https://electronjs.org/headers "configure" "build"

make: Entering directory '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build'
  COPY Release/obj.target/nbind/geni/symbols.txt
  CXX(target) Release/obj.target/nbind/src/cpp/promice.o
  CXX(target) Release/obj.target/nbind/node_modules/nbind/src/common.o
  CXX(target) Release/obj.target/nbind/node_modules/nbind/src/reflect.o
  CXX(target) Release/obj.target/nbind/node_modules/nbind/src/v8/Buffer.o
  CXX(target) Release/obj.target/nbind/node_modules/nbind/src/v8/Binding.o
  SOLINK_MODULE(target) Release/obj.target/nbind.node
  COPY Release/nbind.node
make: Leaving directory '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build'

但是當我通過npm start啟動我的應用npm start我收到以下錯誤:

> electron-cpp-bindings@1.0.0 start /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings
> electron ./src/

App threw an error during load
Error: The module '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build/Release/nbind.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. 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`).
    at process.func [as dlopen] (electron/js2c/asar.js:155:31)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:881:18)
    at Object.func [as .node] (electron/js2c/asar.js:155:31)
    at Module.load (internal/modules/cjs/loader.js:701:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:633:12)
    at Function.Module._load (internal/modules/cjs/loader.js:625:3)
    at Module.require (internal/modules/cjs/loader.js:739:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at initNode (/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:141:15)
    at /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:115:13
A JavaScript error occurred in the main process
Uncaught Exception:
Error: The module '/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/build/Release/nbind.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. 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`).
    at process.func [as dlopen] (electron/js2c/asar.js:155:31)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:881:18)
    at Object.func [as .node] (electron/js2c/asar.js:155:31)
    at Module.load (internal/modules/cjs/loader.js:701:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:633:12)
    at Function.Module._load (internal/modules/cjs/loader.js:625:3)
    at Module.require (internal/modules/cjs/loader.js:739:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at initNode (/home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:141:15)
    at /home/pc_magas/Kwdikas/Javascript/electron-cpp-bindings/node_modules/nbind/dist/nbind.js:115:13

同樣為了解決我的問題,我還運行以下命令序列:

rm -rf ./node_mobules
npm install

在我的道路上沒有光。

所以我想知道為什么我為 nbind 配置了錯誤的標頭,以及如何解決這個問題?

我遇到過同樣的問題。 在嘗試了許多版本的代碼后,我發現了這一點:

  1. 在 JSON 文件中添加一個腳本(在您的情況下更改此行)

    “重建”:“電子重建 -f -w node-gyp”

  2. 構建 C++ 文件

node-gyp configure build

  1. 現在制作相同的版本

npm run rebuild

  1. 現在運行電子

    啟動

這是工作! 試試看。 我知道的不多,但我發現 node.js 和 node-gyp 運行不同版本的 node,因為它避免了沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM