电子原生添加:DLL初始化例程失败

Gir*_*ali 5 c++ dynamic-linking node.js node-gyp electron

我试图将我的C++库链接为我的电子应用程序的本机插件.我能够运行node-gyp rebuild并生成一个成功的.node文件.

但是,当我尝试从main.js调用它时,我得到一个错误,上面写着:"动态链接库(DLL)初始化例程失败".

我的binding.gyp文件如下所示:

{
    'targets': [
    {
        # Usual target name/sources, etc.
        'target_name': 'myclass',
        'sources': [ 'myclass.cc', 'addon.cc' ],
        'libraries': ["../libs/api.lib",
                      "../libs/core.lib",
                      "../libs/camera.lib",
                      "../libs/algo.lib",
                      "../libs/ComCtl32.lib",
                      "../../deps/windows/opencv/lib/x64/*.lib",
                      "../../deps/windows/tbb/lib/x64/*.lib"],
        'include_dirs': ["<!(node -e \"require('nan')\")"],

        'configurations': {
            'Debug': {
                'msvs_settings': {
                            'VCCLCompilerTool': {
                                'RuntimeLibrary': '3' # /MDd
                    },
                },
            },
            'Release': {
                'msvs_settings': {
                            'VCCLCompilerTool': {
                                'RuntimeLibrary': '2' # /MD
                    },
                },
            },
        },
    },],
}
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?如果需要更多信息,请告诉我.

jus*_*ase 1

有几件事可能会出错......

x64 与 x86

您需要确保您的 x86 v x64 二进制文件正确。例如,x64 二进制文件只能在 x64 版本的节点上运行。我看到您直接链接到一些 x64 库,您可能需要根据您的目标架构有条件地链接到正确的库。然后确保您获得正确版本的电子。

依赖的dll

确保您所依赖的 dll 位于正确的位置。基本上它们应该位于尝试加载 dll 的 exe 的同一目录中或旁边。

看起来你使用的是windows所以尝试使用这个工具打开你的dll并查看它的依赖项depends.exe

需要注意的是,当您使用 node-gyp 进行重建时,该 dll 现在只能在 Electron 中打开,您必须使用一些魔法才能使其也从命令行加载到 Node 中,而无需进一步重新编译。

你实际上是如何尝试加载 dll 的?

版本

您必须拥有正确版本的 Node、Electron 和 Node-gyp。对它们全部进行三次检查。

如果您需要更多详细信息,我可以详细说明这些主题中的任何一个。