我试图在电子子进程中使用 sqlite3 模块,但出现未定义符号的错误。另外,只有当我从 Electron 的 Node.js 运行程序时才会发生错误,但是当我从普通的 Node.js 运行程序时一切正常。我认为问题可能与 sqlite3 模块的“本机性”有关,我尝试过electron-rebuild,npm --build-from-source但它们没有帮助。
main.js:
const { fork } = require('child_process');
fork('fork');
Run Code Online (Sandbox Code Playgroud)
fork.js:
const sqlite3 = require('sqlite3');
Run Code Online (Sandbox Code Playgroud)
包.json:
{
"name": "bugreproduce_sqlite",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"sqlite3": "^4.0.2"
},
"devDependencies": {
"electron": "^3.0.5"
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
> ./node_modules/electron/dist/electron .
/home/myuser/Programming/javascript/bugreproduce_sqlite/node_modules/electron/dist/electron: symbol lookup error: /home/myuser/Programming/javascript/bugreproduce_sqlite/node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.node: undefined symbol: _ZN2v816FunctionTemplate3NewEPNS_7IsolateEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEENS_5LocalIS4_EENSA_INS_9SignatureEEEiNS_19ConstructorBehaviorENS_14SideEffectTypeE
Run Code Online (Sandbox Code Playgroud)
我找到了根本问题。这是GitHub 上的相关问题和拉取请求 1、拉取请求 2 。
我暂时解决问题的步骤是:
checkout到 sqlite3 想要的版本(目前为 0.10.3)npm install ../path/to/patched/node-pre-gyp从主项目文件夹安装这个修补过的node-pre-gypnpm i --build-from-source sqlite3(不确定是否需要此命令)和./node_modules/.bin/electron-rebuild主项目文件夹(我安装了 electro-rebuild)使用电子版本集进行调用fork,如下所示:
fork('fork', [], {
env: {
ELECTRON_VERSION: "3.0.5"
}});
这是一个 hack,但似乎有效。希望上游能解决这个问题。
编辑:修复了拉取请求链接(我使用了第二个拉取请求,而不是第一个)
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |