在linux-wmxt 4.16.8-1-default(Tumbleweed)上运行。
我有一个调用openssl 1.0 API的库。我可以动态链接或静态链接。要么产生相同的结果。
如果我从C测试工具中运行它,它可以正常工作。
通过node-gyp扩展使用节点的相同调用会产生内存故障,我认为这是由于调用被路由到API调用的节点版本,我相信它使用的是openssl 1.1(不是与1.0兼容的ABI)
:
#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版本而不是Nodes?或者我必须将我的代码更新为openssl 1.1吗?
答案 0 :(得分:0)
您可以更改binding.gyp并使其在您的节点插件中包含您的openssl版本中的lib和include文件(通过提供路径)。
答案 1 :(得分:0)
我确实尝试了对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 /本地 --openssldir = $ HOME / local / openssl
libcurl:./configure --prefix = $ HOME / local --with-ssl = $ HOME / local --disable-ldap
libxmlsec1:./configure --prefix = $ HOME / local --without-libxslt --with-openssl = $ HOME / local
相同的结果。因此,我忍无可忍并升级了我的代码,使其与OpenSSL 1.1+兼容。
现在,节点绑定起作用了。