node-gyp 扩展可以调用扩展链接 OpenSSL 而不是节点 OpenSSL 吗?



运行在linux-wmxt 4.16.8-1-default(风滚草(上。

我有一个调用openssl 1.0 API的库。我可以动态链接或静态链接。两者都会产生相同的结果。

如果我从 C 测试工具运行它,它工作正常。

通过node-gyp扩展使用node的相同调用会产生内存错误,我相信这是由于调用被路由到API调用的节点版本,我相信该API调用使用openssl 1.1(与1.0不兼容(。

:
#17 0x12838e1 in ASN1_item_d2i_bio (/home/me/.nvm/versions/node/v10.1.0/bin/node+0x12838e1)
#18 0x7f808108687e in _extractp7certs /home/me/Projects/git/test.sdk.c/c/test/src/testcrypto.c:678
:
SUMMARY: AddressSanitizer: heap-buffer-overflow

MacOS High Sierra上完全相同的代码库(静态链接(在节点9.9上工作正常。

在进一步深入研究之前:一个简单的问题。有没有办法让node-gyp确保我的代码调用我的OpenSSL版本而不是节点?还是我必须将我的代码更新到 openssl 1.1?

我确实尝试了对binding.gyp的各种更改,例如

{
"targets": [
{
"target_name": "myid",
"include_dirs": [ "../dep/include" ],
"sources": [ "./src/myid.c" ],
"libraries": [
"/home/me/local/lib64/libcrypto.so",
"/home/me/local/lib64/libssl.so",
"/home/me/local/lib64/libcurl.so",
"/home/me/local/lib64/libxmlsec1.so",
"../dep/slib/libmylib.so"
]
}
]
}

这些 1.0 库是用以下方法构建的:

openSSL: ./config --prefix=$HOME/local --openssldir=$HOME/local/openssl

libcurl: ./configure --prefix=$HOME/local --with-ssl=$HOME/local --禁用-LDAP

libxmlsec1: ./configure --prefix=$HOME/local --without-libxslt --with-openssl=$HOME/local

相同的结果。所以我咬紧牙关,升级了我的代码以兼容OpenSSL 1.1+。

现在节点绑定工作了。

您可以更改 binding.gyp 并使其包含在您的节点插件中,并包含来自您的 openssl 版本的文件(通过提供路径(。

最新更新