A causa da questão é essa. Por alguma razão, escrevi recentemente o módulo C ++ 'C ++' e depois o chamei no JS. A comunicação de rede é naturalmente inseparável da SSL, por isso é necessário vincular à biblioteca do OpenSSL.
Nossa expectativa original era que o usuário precise instalar a biblioteca de tempo de execução do OpenSSL e, em seguida, nosso módulo C ++ links dinamicamente ao OpenSSL SO da biblioteca para executar.
Tudo parecia muito bom no começo até descobrirmos que essa função OpenSSL não funciona:
Pkcs7_sign ()
Pkcs7_sign ()
Encontramos:
Se nosso módulo C ++ estiver dinamicamente vinculado à biblioteca OpenSSL, não há problema na compilação. No entanto, se ocorrer a operação, um erro que não pode ser encontrado no símbolo PKCS7_SIGN.
Se nosso módulo C ++ estiver estaticamente vinculado à biblioteca OpenSSL, não há nenhum problema com a compilação, mas, ao executar, a chamada para essa função não tem efeito, e o valor de retorno dessa função é 0. De acordo com o documento, ocorreu um erro, mas o uso de função do OpenSSL err_get_error para obter o código de erro também é 0. Não há código de erro.
Isso é verdade no Linux, e no Mac? Eu tentei com Mac e descobri que não havia problema com o Mac. Então eu pensei que isso poderia ser um bug no NodeJS. Então eu fui ao NodeJS e relatei um bug: [https://github.com/joyent/node/issues/8026By1]
Ao mesmo tempo, procurei palavras -chave semelhantes ao NodeJS vinculando ao OpenSSL no Google.
Encontrei alguns artigos como este:
https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl
https://github.com/joyent/node/issues/3915
http://serverfault.com/questions/338092/how-can-i-build-node-js-using static-libssl-and-crypto-libraries
https://github.com/robhawkes/node-extension/issues/1
Através da pesquisa, descobrimos que o próprio NodeJS também usava a biblioteca OpenSSL. Especula -se que o próprio módulo Crypto do NodeJS também seja implementado usando o OpenSSL Lib. Isso pode ser encontrado no código -fonte do NodeJS, que contém todo o código -fonte OpenSSL mais recente.
O cara bonito que escreveu o primeiro artigo acima: https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl é o desenvolvedor do NodeJS.
Conclusão básica:
Nodejs usa o próprio OpenSSL
Antes do NodeJS 0.6, o NodeJS estava dinamicamente vinculado à biblioteca OpenSSL. As versões subsequentes foram estaticamente ligadas.
No momento, descobri que o Node havia respondido ao meu bug: https://github.com/joyent/node/issues/8026
Node explica o porquê:
Depois que o nó se compila, ele limpa os símbolos que não usa, por isso não podemos encontrar os símbolos ao executar. Então eles corrigiram o bug e mantiveram todos os símbolos. Isso fez com que o nó fosse 400k maior.
Graças ao Node por sua resposta rápida, tenho que admirar o nível de atividade do Node. Como.