返回

NodeJS: 引用 ffi-napi 后 pkg 打包排查过程

前端

NodeJS: 引用 ffi-napi 后 pkg 打包,排查过程记录

引言

最近在项目中尝试使用 ffi-napi 模块来访问原生库,但在使用 pkg 打包后遇到了各种问题。本文将记录排查过程和解决办法,以帮助遇到类似问题的开发者。

问题 1: Windows 平台下 .exe 程序启动闪退

症状: 在 Windows 平台上,用 pkg 打包后生成的 .exe 程序启动后立即闪退,没有留下任何错误信息。

解决办法: 检查 pkg 的 executable 选项。默认情况下,pkg 会将输出的 .exe 文件设为 Windows 子系统 2(WSL2)可执行文件,但这可能会导致兼容性问题。将 executable 选项设置为 win32 即可解决此问题。

pkg . --output-path ./dist/win --target win32 --out-path ./dist/win

问题 2: Linux 平台下启动失败

症状: 在 Linux 平台上,用 pkg 打包后生成的二进制文件无法启动,并提示以下错误:

./dist/linux: error while loading shared libraries: libffi.so.6: cannot open shared object file: No such file or directory

解决办法: 确保已安装 libffi 库。ffi-napi 依赖于 libffi,因此在打包前必须安装该库。

# Ubuntu/Debian
sudo apt-get install libffi-dev

# CentOS/Red Hat
sudo yum install libffi-devel

问题 3: pkg 打包后缺少符号

症状: 在 Windows 平台上,用 pkg 打包后生成的 .exe 程序缺少某些符号,导致在启动时崩溃。

解决办法:--symbols 选项添加到 pkg 命令中。此选项将生成包含符号信息的调试文件,可以帮助调试崩溃问题。

pkg . --output-path ./dist/win --target win32 --out-path ./dist/win --symbols

结论

通过记录排查过程,本文提供了解决使用 ffi-napi 模块和 pkg 打包时常见问题的具体步骤。希望这些解决办法能够帮助开发者解决类似的问题,并顺利完成他们的项目。

参考