gpt4 book ai didi

node.js - Electron 在 Windows 上运行 SQLlite 3 - 动态链接库 (DLL) 初始化例程失败

转载 作者:搜寻专家 更新时间:2023-10-31 23:19:35 26 4
gpt4 key购买 nike

这与此类似 Electron Uncaught Error: A dynamic link library (DLL) initialization routine failed

ELECTRON_ASAR.js:173
return old.apply(this, arguments)
^

Error: A dynamic link library (DLL) initialization routine failed.
\\?\C:\workspace\client\client\desktop\node_modules\sqlite3\lib\binding\node-v57
-win32-x64\node_sqlite3.node
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
at Object.Module._extensions..node (module.js:671:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:504:12)
at Function.Module._load (module.js:496:3)
at Module.require (module.js:586:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (C:\workspace\client\client\desktop\node_modules\sqlit
e3\lib\sqlite3.js:4:15)
at Object.<anonymous> (C:\workspace\client\client\desktop\node_modules\sqlit
e3\lib\sqlite3.js:190:3)

我已经尝试了这篇文章中建议的所有内容以及我能找到的任何其他内容

我已经安装了 Electron 重建并添加了“重建”:“Electron 重建 -f -w sqlite3 -V 1.7”

这是运行没有错误。

我试过 "postinstall": "install-app-deps",

这没有帮助..

还有什么可以尝试的吗?

文件在那里..

enter image description here

最佳答案

这最终成为了一堆不同问题的混搭。我将从最简单的开始,然后从那里开始。

平台

你在那里的错误表明它想要 node-v57-win32-x64 , 但如果你从 Electron 运行它应该是 electron-v2.0-win32-x64 (或 electron-v1.7-win32-x64 如果您使用的是旧版本)。我也遇到了这个,因为我正在运行 sqlite3在子进程中。 Electron 中的子进程位于完整 Node 上下文中,而不是 Electron(浏览器或 Node + 浏览器)上下文中。我通过环境变量将 Electron 版本从主浏览器进程( process.versions.electron )传递给子进程并将其设置在 process.versions.electron 上来解决此问题。在子进程中。

警告:这是一个 HACK 并且有效,因为我没有在该过程中使用任何需要完整 Electron 环境的东西。它实际上只是让它找到正确的 native 绑定(bind)。更正确的解决方法是考虑制作 electron-builder构建 node-v57-win32-x64反而。

说到这里,让我们接下来创建它们。

安装后

"scripts": {
...
"postinstall": "electron-builder install-app-deps"
}

这应该在运行 npm install 时尝试重建您的 native 依赖项或 yarn install .如果您有 project/app目录,它们将被放置在 project/app/node_modules/ .否则他们会进去 project/node_modules .

传递依赖

就我而言, sqlite3实际上是我的依赖集中另一个包的传递依赖。虽然 electron-builder在 Linux/OS X 上正确选择这些并在安装程序创建期间显示:
• rebuilding native production dependencies platform=linux arch=x64
• rebuilding native dependency name=sqlite3

Windows 版本显示:
• no native production dependencies

这是通过添加传递依赖作为直接依赖来解决的。在我这样做之后,该包开始被 Electron 生成器拾取以进行编译,并且正在吐出错误。

window 构建

要修复这些错误:
  • 安装python(我用的是最新的2.7)
  • 安装 Microsoft Build Tools 2013并重新启动
  • 运行您的 postinstall再次编写脚本

  • 这就是我说它“解决了一半”的地方。这应该是基本 Electron 项目设置的完整解决方案。

    yarn 工作区

    我使用 yarn 工作区功能,我的项目设置是这样的:
    yarn-workspace-project/
    workspace/
    project/
    web-app/
    project-electron/
    app/

    对于这种设置, yarn install一般运行在 yarn-workspace-projectyarn-workspace-project/workspace目录,而不是在每个项目中。这会产生一个吊起 node_modules/目录在 yarn-workspace-project/node_modules .创建打包版本时, electron-builder从该提升位置获取依赖项,然后一切运行。

    project-electron 中运行我的启动脚本时然而, electron .在查找 native 绑定(bind)时遇到了一些问题。使用 sqlite3 的包安装在 yarn-workspace-project/node_modules 下,因此正在解析 sqlite3yarn-workspace-project/node_modules/sqlite3 .这绝对存在于 yarn install ,但 Electron 绑定(bind)被放入 yarn-workspace-project/workspace/project-electron/app/node_modules/sqlite3 .

    对此有多种明显的解决方案,因此我将其留给读者作为练习。这里的关键问题是为 node-v57-win32-x64 下载的默认绑定(bind)(我认为?我不记得它们是被构建的)。即使错误表明它们不存在(它们确实存在),也不能像在 Linux/OS X 上那样在 Windows 10 上开箱即用。

    关于node.js - Electron 在 Windows 上运行 SQLlite 3 - 动态链接库 (DLL) 初始化例程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904649/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com