问题标签 [node-native-addon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
20 浏览

c++ - LINUX 上的 Node.JS 原生插件

我学习了如何为 node.js 制作本机 c++ 插件,但现在我想在 linux 上制作一个已编译的插件。我从 /build/Release 文件夹中取出 .node 文件(我使用 node-gyp 进行编译)并将其放在 linux 文件夹中。该插件在 Windows 上正常工作,但在 linux 上我收到此错误:Error: /root/folder/addon3.node: invalid ELF header. 此错误是什么意思以及如何解决?我以这种方式使用插件:

0 投票
0 回答
30 浏览

javascript - 原生插件如何影响 node.js 程序?

我有这样的代码:

它们工作正常,给出相同的结果,一切都很好,但唯一的问题是在第一个代码中 JS f() 大约需要 15 毫秒,但在第二个示例中需要大约 3 毫秒。而且这个结果是稳定的(当我多次启动程序时,它给出的结果几乎相同)。怎么会这样?为什么函数在 JS 上的性能取决于从原生插件调用独立函数?

PS 这是两次运行程序的控制台:

0 投票
0 回答
139 浏览

node.js - 处理 npm 依赖项中的版本不兼容

一些上下文

每次发布基于新版本 Node 的 VS Code 时,VS Code Arduino 扩展都会中断,直到发布新版本。

克隆了 Arduino 扩展 git repo 后,我将其作为扩展卸载并在调试器中运行。这行得通,现在我有了特定的情报,只要我知道如何采取行动就好了。这是消息:

这些文件中的最后一个(Windows x64 文件)确实存在于预期路径上,因此“没有可用的库”并不意味着它找不到该文件。这与报告找不到合适版本的消息的结尾一致。

这条消息的结尾表明npm rebuild,或者npm i我尝试了这些都无济于事。

翻箱倒柜package.json_

依赖于node-usb-native最新的(0.0.15)。更改它并运行npm i会触发rebuild-serialport.js似乎成功的安装后任务,但我在运行时遇到相同的错误。

问题

我该如何解决这个问题?

  • 究竟需要重建什么?usb-detection未在依赖项(或 devDependencies)中列出,但如果我没记错的话node-usb-native,取决于它。
  • 我该如何解决这个问题,以便抱怨版本的代码看到新生成的位?
0 投票
0 回答
228 浏览

c++ - Node-ffi:在 js 中加载 C++ dll(具有外部依赖项)正在崩溃

我正在尝试使用 node-ffi 在 JS 中加载 c++ dll。当 dll 没有任何外部依赖项时,它可以正常工作。但是当它有任何外部依赖时,它就会崩溃。

当“MyDll”有外部依赖时,它会崩溃并抛出下面提到的错误。

0 投票
0 回答
120 浏览

node.js - 调用本机插件时电子崩溃,该插件使用窗口的 uiautomation 库来检测另一个窗口中的按钮

我有一个本地插件,可以检测缩放会议窗口并在其中找到一些按钮。
该本机插件是使用 NAPI(node-addon-api) 制作的,当我运行它时,它工作正常......(给我那个按钮名称)。

但是,当我尝试在电子中运行该本地插件时,它会使电子应用程序崩溃。

这是检测元素的本机插件 C++ 代码:

0 投票
0 回答
112 浏览

c++ - 无法使用自定义 libobs 构建 32 位 obs-studio-node

我可以64bit obs-studio-node用自定义构建OSN_LIBOBS_URL

但我无法32bit obs-studio-node使用自定义构建32bit OSN_LIBOBS_URL 我遵循以下步骤

首先,我32bit libobs使用步骤构建

  1. git clone --recursive https://github.com/stream-labs/obs-studio
  2. cd obs-studio
  3. mkdir build32
  4. cmake -G "Visual Studio 16 2019" -A Win32 -S . -B build32 -DDepsPath=C:\Users\alokm\Downloads\dependencies2019\win32 -DCMAKE_CONFIGURATION_TYPES=Release -DENABLE_UI=false -DENABLE_SCRIPTING=false
  5. cmake --build build32 --config Release
  6. cd .\build32\
  7. cpack -G TGZ 我已经obs-studio/build32/obs-studio-x86-26.4.9-modified.tar.gz生成了

我用这个生成libobs的建筑obs-studio-node

  1. git clone https://github.com/stream-labs/obs-studio-node
  2. cd obs-studio-node
  3. mkdir build32
  4. cmake -G"Visual Studio 16 2019" -A Win32 -DOSN_LIBOBS_URL="C:/Users/alokm/tmp/streamlabs/obs-studio/build32/obs-studio-x86-26.4.9-modified.tar.gz" -B build32
  5. cmake --build build32 --config Release此步骤给出链接器错误

在 32 位构建的情况下我缺少什么?

0 投票
0 回答
121 浏览

reactjs - Electron-TypeScript-React 应用程序中本机模块的接口

我正在使用 Electron、React 和 TypeScript 编写一个依赖于本机 Node 模块的应用程序。我启用了上下文隔离,并且正在使用预加载脚本将本机模块的 API 公开到全局范围。我的预加载脚本如下所示:

在我的应用程序的非打字稿版本中,我可以通过以下方式使用它:

然而,TypeScript 显然没有原生模块的 API 概念。我应该如何让它知道?我取得的一项成功是index.tsx推杆:

但这似乎很笨拙。我应该在本机模块中放置一个 .d.ts 文件吗?我可以导出这个接口合并到不同的文件吗?作为参考,我将Neon与 N-API 后端一起使用。

0 投票
0 回答
38 浏览

node.js - 在 Node.js 中使用现有的 C 代码作为本机插件

我以前从未处理过 C 或 C++,所以请与我保持一致 :) 我想将此 Repo 中的 C 代码用作节点模块:

https://github.com/torvalds/pesconvert

我读到这可以通过 Node.Js Native Addons 来完成,但我能找到的所有示例都是关于集成 C++ 代码的。我已经安装了 node-gyp 和 windows-build-tools 来编译代码,但是因为我使用的是 windows,所以本地没有安装所需的 png.h 库。我下载了 libpng V1.6.37 并将其复制到我的项目目录中lib/lpng1637。现在我必须编写 binding.gyp 文件,但我不知道如何编写它以便正确包含库。

我尝试了很多变化,这是我最新的masterpeace ...:DI 读到“库”中的引用必须指向 .a 文件,以防静态库,但甚至没有 .a 文件目录。所以我的关键问题是:我必须在 binding.gyp 文件中写什么才能正确引用 libpng-Library?

我会很高兴收到各种提示或附加信息!

0 投票
1 回答
61 浏览

cmake - 将 CMake 生成器表达式与 GYP 一起使用

我正在开发包含 C 和 C++ 源的 Node.js 本机模块。node-gyp用于构建模块。

由于我只希望在 C 代码中出现一个警告错误,因此我在以下行中使用binding.gyp

这在编译 C 代码时工作正常,但会在每个 C++ 源文件上产生以下警告:

我找到了这个答案——将特定于 C 的 gcc 选项应用于 C/C++ 混合库——它在使用“纯”CMake 时解决了同样的问题。不幸的是,我没有找到是否可能以及如何将此条件正确添加到 GYP 配置文件中 - 也许使用变量和条件?请让我知道它是否可以解决。谢谢。

0 投票
1 回答
196 浏览

node.js - 如何在我的 Electron 应用程序中加载我自己的本机节点模块?

foo我为我的 Electron 应用程序构建了一个 C++ 本机模块。该模块位于我的项目根目录中。我package.json通过设置本地路径将项目添加到我的项目中 - 这是一个受支持并在此处描述的功能。

当我npm i在我的 Electron 应用程序中执行时,所有本机模块都被编译并且我自己的模块吐出一个my-electron-app/foo/build/Release/foo.node二进制文件。但是通过在我的 Electron 应用程序中“导入”模块require("foo")失败,我收到以下错误:

如您所见,foo.node不在其实际模块目录中搜索my-electron-app/foo/build/Release/.

位于node_modules/并包含build/Release目录的所有其他本机模块都可以正常加载。

PS如果我复制foo.node到预期的位置之一,模块加载正常。