如何告诉本机节点模块所需的dll存储在哪里?
How to tell a native node module where the needed dlls are stored?
我目前正在开发一个用于Node.Js和Electron的本机节点模块,需要额外的dll才能工作(以及Linux和Mac上的等效物(。 我并不是真的喜欢C++开发,也没有在互联网上找到这个问题的解决方案,所以我可能需要你的一些支持:)
因此,当所有内容都存储在同一个(工作(目录中时,它运行良好,但从长远来看,这不是您可以长期使用的东西。 特别是当我将所有内容打包到可以使用 NPM 加载的模块中时,带有 dll 的模块存储在像"./node_modules/native-module/build/Release/adddon.node[or dll]"这样的子文件夹中。
我可以轻松地将模块包含在 require 中,但它不再找到任何 dll,因为如果我正确理解C++行为,它只会在 PATH 中查找并执行当前工作目录(即电子或节点.js执行(的 dll。
我的第一个解决方法是将 cwd 更改为所有 dll 所在的"发布"文件夹。 但是当你喜欢使用 webpack 的热重载功能时,更改 cwd 会变得非常混乱,我将其用于开发目的。 您始终必须检查cwd是否已更改,它不再正确显示页面,我真的认为这不是这样做的方法。
所以我的问题是动态告诉节点模块 dll 存储位置的相关方法是什么? 提前谢谢。
PS:如果这很重要,我正在使用 cmake-js 进行构建过程。
我通过在运行时使用 node.js API 扩展 Path 环境变量来"修复"这个问题。至少在Windows下,本机C++程序的默认行为是在路径和CWD中查找Dlls。
这是我的代码,如果有人感兴趣的话:
let currentPath = process.env.Path;
let dllDirectory = path.dirname( path.resolve(require.resolve('your-package-name/package.json'))) + `${path.sep}build${path.sep}Release`
process.env.Path = currentPath + dllDirectory;
相关文章:
- 将字符串存储在c++中的稳定内存中
- 挂起和取消挂起一个文件DLL
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在 C++ DLL 中存储状态
- 将sf::纹理存储在dll中的静态变量中
- OpenSSL dll文件存储在哪里
- 多个动态链接库(DLL)是否可以从静态库(LIB)共享线程本地存储
- 是否可以将 VS C++ 项目生成的 DLL/EXE 项目存储在 NuGet 包中
- 我想在 DLL 中存储一些变量
- 卸载DLL后,我可以存储在DLL中创建的对象吗
- 其中是调试信息(断点等)存储在本机C++dll项目VS2013中的位置
- 使用.dll来存储其他.dll或.lib
- 我可以将我的项目指向本地存储的glut.dll
- 使用Win32 API列出存储在资源专用库(DLL)中的消息id和符号名称
- DLL的全局变量存储在内存中
- 程序使用的DLL,其中声明的变量存储在哪里
- D3D9代理DLL存储D3DXMATRIX (c++)