关于在 Linux 系统上编译 NodeJS addon,并静态链接 OpenSSL 不可行的原因解析
场景
我们的网络库均是使用 c++ 编写的跨平台代码,然后将其封装成 nodejs addon,以便给 electron 应用程序使用。
为了让我们的程序在不同平台上表现一致,我们决定在所有平台都静态链接 zlib 和 openssl 库。
Windows 平台和 macOS 平台
这样的方案,在 Windows 和 macOS 平台都取得了成功,并没有任何意外的错误。
Linux 平台
但是同样的方案,在 Linux 上却无法正常工作。
在如下平台都无法正常工作:
- Ubuntu 22
 - Deepin 20
 
这里值得一提:
- 我们自己使用的 OpenSSL 版本是 3.1
 - Deepin 20 上当前安装的 openssl 版本是 openssl 1.1
 - Ubuntu 没有留意。
 - 我们使用的 nodejs 版本是 22
 
链接到我们自己的 openssl 库的时候,是可以正常编译通过。但是,运行起来之后会崩溃。
通过调试,发现是
SSL_library_init()
会崩溃。
具体原因未知。
因此,在 linux 平台上,我们不得不使用系统中安装的 openssl 库进行编译。这种方案目前是工作的,没有发现其他意外行为。