我正在尝试在带有 Electron 的子进程中使用sqlite3模块,但出现 undefined symbol 的错误。而且,仅当我从 Electron 的node.js运行程序时才会发生错误,但是当我从通常的node.js运行程序时,一切正常。我认为问题可能与sqlite3模块的“本地性”有关,我尝试了electron-rebuild
,npm --build-from-source
,但它们没有帮助。
main.js:
const { fork } = require('child_process');
fork('fork');
fork.js:
const sqlite3 = require('sqlite3');
package.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"
}
}
输出:
> ./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
最佳答案
我找到了根本问题。
这是GitHub上的相关issue和pull request 1,pull request 2。
我临时解决此问题的步骤是:
checkout
到sqlite3想要的版本(目前为0.10.3)npm install ../path/to/patched/node-pre-gyp
安装此补丁前的gypnpm i --build-from-source sqlite3
(不确定是否需要此命令)和主项目文件夹中的./node_modules/.bin/electron-rebuild
(我安装了electronic-rebuild)fork
并设置了 Electron 版本,如下所示:fork('fork', [], { env: { ELECTRON_VERSION: "3.0.5" }});
这是一个hack,但它似乎可以正常工作。希望问题将在上游得到解决。
编辑:固定的拉取请求链接(我使用了第二个拉取请求,而不是第一个)
关于node.js - 在 fork 过程中需要sqlite3 native 模块时, Electron 崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52897950/