我正在尝试将C++库作为 native 附件链接到我的 Electron 应用程序。
我能够运行node-gyp重建并生成成功的.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
                    },
                },
            },
        },
    },],
}

有什么事吗请让我知道是否需要更多信息。

最佳答案

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

x64与x86

您需要确保正确安装了x86 v x64二进制文件。例如,x64二进制文件只能在x64版本的 Node 上运行。我看到您直接链接到某些x64库,您可能需要根据要定位的体系结构有条件地链接到正确的库。然后确保获得正确版本的 Electron 。

依赖的dll

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

看来您使用的是Windows,因此请尝试使用此工具打开您的dll,并查看其依赖项depends.exe

需要注意的是,当您使用node-gyp进行重建时,dll现在仅会以 Electron 形式打开,您必须做一些魔术才能使其也从命令行从 Node 加载,而无需进行进一步的重新编译。

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

版本号

您必须具有 Node , Electron 和 Node gyp的正确版本。三重检查所有。

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

关于c++ - Electron native 添加到: DLL initialization routine failed,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34505670/

10-09 20:34