如何使用node-gyp为电子链接和打包外部库

问题描述

我使用 N-API (a native OCR module) 创建了 node-addon-api,并绑定到 tesseract OCR。

我的目的是让原生 OCR 在电子下工作。我基本上检查了所有与 OCR 相关的 npm 包,它们都不适用于电子。这是我自己的测试项目 基于电子,它使用我的 node-native-ocr 模块: https://github.com/stoefln/electron-ocr

我的问题: 捆绑电子时,我无法打包所有依赖项。或者我这样做的方式似乎有问题,因为我目前在生产中运行电子项目时遇到此错误

dyld:找不到符号:_fmemopen 引用自:/Volumes/Shared 文件夹/下载/电子 OCR.app/Contents/Resources/app/node_modules/node-native-ocr/build/Release/dependencies/liblept.5.dylib 预期在:/usr/lib/libSystem.B.dylib

我目前尝试打包的方式:生成的 .node 文件依赖于 tesseract(用 brew 构建),它依赖于系统上安装的许多其他库。 我想出的是 a script,它递归地读取依赖项 (otool -l),将它们复制到 .node 文件夹中,并将链接 (install_name_tool -change ...) 更改为指向复制的 dylib 文件

我什至不确定这是否是正确的做法。 node-gyp 链接器不应该负责链接和打包所有内容吗? 有人问基本相同的问题:https://github.com/nodejs/node-gyp/issues/2258


如果您想重现我的问题,请提供更多信息

  1. 运行npm run export-mac
  2. 将 .app 文件复制到其他机器上,以确保它不使用系统中的库,而只使用打包的库。
  3. 通过命令行启动应用程序(否则您不会看到错误):./your_path_to_the_app_file/Electron\ OCR.app/Contents/MacOS/Electron\ OCR
  4. 单击 UI 中的单个按钮并检查终端输出

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)