我使用 N-API ( node-addon-api ) 创建了一个本机 OCR 模块,并绑定到 tesseract OCR。
我的目的是让原生 OCR 在电子下工作。我基本上检查了所有与 OCR 相关的 npm 包,它们都不适用于电子。这是我自己的基于电子的测试项目,它使用了我的 node-native-ocr 模块: https ://github.com/stoefln/electron-ocr
我的问题:捆绑电子时,我无法打包所有依赖项。或者我这样做的方式似乎有问题,因为我目前在生产中运行电子项目时遇到此错误:
dyld:找不到符号:_fmemopen 引用自:/Volumes/Shared Folders/Downloads/Electron OCR.app/Contents/Resources/app/node_modules/node-native-ocr/build/Release/dependencies/liblept.5.dylib 预期在:/usr/lib/libSystem.B.dylib
我目前尝试打包的方式:生成的 .node 文件取决于 tesseract(用 brew 构建),它取决于系统上安装的许多其他库。我想出的是一个脚本,它递归地读取依赖项 ( otool -l
),将它们复制到 .node 文件夹并更改链接 ( install_name_tool -change ...
) 以指向复制的 dylib 文件。
我什至不确定这是否是正确的做法。node-gyp 链接器不应该负责链接和打包所有内容吗?这是有人问基本相同的问题:https ://github.com/nodejs/node-gyp/issues/2258
如果您想重现我的问题,请提供更多信息:
- 跑
npm run export-mac
- 将 .app 文件复制到其他机器,以确保它不使用系统中的库,而仅使用打包的库。
- 通过命令行启动应用程序(否则您将看不到错误):
./your_path_to_the_app_file/Electron\ OCR.app/Contents/MacOS/Electron\ OCR
- 单击 UI 中的单个按钮并检查终端输出