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

时间:2015-12-29 06:29:51

标签: c++ node.js dynamic-linking electron node-gyp

我正在尝试将我的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
                    },
                },
            },
        },
    },],
}

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

2 个答案:

答案 0 :(得分:1)

有些事情可能会出错...

x64 vs. x86

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

依赖dll

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

看起来您正在使用Windows,因此请尝试使用此工具打开您的dll并查看其依赖关系depends.exe

需要注意的是,当您使用node-gyp进行重建时,dll现在只能在电子中打开,您必须做一些魔术才能让它从命令行加载到节点而无需进一步重新编译。 / p>

你是如何尝试加载dll的?

版本

你必须拥有完全正确版本的node,electron和node-gyp。三重检查所有。

如果您需要更多详细信息,我可以详细说明这些主题。

答案 1 :(得分:1)

npm install -g prebuild

  

cd node_modules / ffi   prebuild -t 1.3.1 -r electron

     

cd node_modules / ref   prebuild -t 1.3.1 -r electron

'1.3.1'是电子的版本