返回介绍

编译原生模块

发布于 2024-09-11 01:11:56 字数 1649 浏览 0 评论 0 收藏 0

如何实现在 Windows 环境下,编译 src/native/clipboard.cc 源码,在 Mac 环境下编译 src/native/clipboard.mm?

编译配置文件:src/native/binding.gyp 最后一个配置节提供了配置能力。这个配置节的作用是在操作系统不同时('OS=="mac"'),指定不同的源码文件(sources)、依赖库(libraries)和编译工具(msvs_settings、xcode_settings)。

现在执行如下指令来生成构建工程:

node-gyp configure

构建好工程之后,尝试使用如下命令来编译这个原生模块。

node-gyp build

如果在命令行环境中看到彩色的 gyp info ok 这行信息,说明原生模块已经编译成功了,它被放置在 build/Release/addon.node 路径下。

接下来写一段 JavaScript 代码,测试一下这个原生模块。

//src\native\test.js
let native = require("./build/Release/addon.node");
let paths = native.readFilePaths();
console.log(paths);

先复制几个文件,然后使用如下命令执行这个测试脚本:

node test.js

看看你复制的文件路径是不是已经打印到控制台上了呢?

上面编译出的原生模块不一定能在 Electron 应用中正常工作。这是因为 Electron 内置的 Node.js 的版本可能与你编译原生模块使用的 Node.js 的版本不同。如果在 Electron 工程内使用原生模块时,碰到如下错误:

Error: The module '/path/to/native/module.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION $XYZ. This version of Node.js requires
NODE_MODULE_VERSION $ABC. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).

则说明你使用的原生模块与 Electron 的 ABI 不匹配,此时就要针对 Electron 内置的 ABI 来编译你的原生模块。

使用方法与编译 SQLite 原生模块时相同,如下指令所示:

electron-rebuild -f -m ./src/native

现在编译出的原生模块就可以在 Electron 工程下正常使用了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文