La cause du problème est la suivante. Pour certaines raisons, j'ai récemment écrit le module c de Nodejs, puis je l'ai appelé du côté js. La communication réseau est naturellement indissociable du SSL, elle doit donc être liée à la bibliothèque Openssl.
Notre attente initiale était que les utilisateurs devraient installer la bibliothèque d'exécution Openssl, puis notre module c serait lié dynamiquement à la bibliothèque Openssl afin de fonctionner.
Tout avait l'air bien au début, jusqu'à ce que nous découvrions que cette fonction openssl ne fonctionne pas :
PKCS7_sign()
PKCS7_sign ( )
Nous avons trouvé :
Si notre module c est lié dynamiquement à la bibliothèque Openssl, il n'y aura aucun problème de compilation. Mais lors de l'exécution, une erreur apparaîtra : le symbole PKCS7_sign est introuvable.
Si notre module c est lié statiquement à la bibliothèque Openssl, il n'y aura aucun problème de compilation, mais lors de l'exécution, l'endroit où cette fonction est appelée n'a aucun effet, et la valeur de retour de cette fonction est 0. D'après la documentation, une erreur se produit, mais l'erreur est obtenue à l'aide de la fonction Openssl ERR_get_error Le code est également 0. Cela signifie qu'il n'y a pas de code d'erreur.
C'est vrai sous Linux, mais qu'en est-il de Mac ? Je l'ai essayé sur Mac et j'ai constaté qu'il n'y avait aucun problème avec Mac. J'ai donc pensé qu'il s'agissait peut-être d'un bug dans Nodejs. Ensuite, je suis allé sur Nodejs et je lui ai signalé un bug : [ https:// github.com/joyent/node/issues/8026][1]
En parallèle, j'ai recherché des mots-clés similaires à nodejs reliant à openssl sur google.
J'ai trouvé plusieurs articles comme celui-ci :
https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL
https://github.com/joyent/node/issues/3915
https://github.com/robhawkes/node-extension/issues/1
En effectuant des recherches, nous avons découvert que Nodejs lui-même utilise également la bibliothèque Openssl. Il est supposé que le propre module de chiffrement de nodejs est également implémenté à l'aide de la bibliothèque Openssl. Cela peut être trouvé dans le code source de Nodejs, qui contient toutes les dernières versions d'Openssl. Code source.
Le beau mec qui a écrit le premier article ci-dessus : https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL est un développeur Nodejs.
Conclusion de base :
Nodejs utilise Openssl lui-même
Avant Nodejs 0.6, Nodejs était lié dynamiquement à la bibliothèque Openssl. Les versions ultérieures étaient liées statiquement.
A ce moment-là, j'ai découvert que Node avait déjà répondu à mon bug : https://github.com/joyent/node/issues/8026
La raison expliquée par Node :
Après la compilation de Node, il a effacé les symboles qu'il n'utilisait pas, nous n'avons donc pas pu trouver les symboles lors de l'exécution. Ils ont donc corrigé le bug et conservé tous les symboles, ce qui a fait augmenter la taille de Node.
Merci Node pour la réponse rapide, je dois admirer l'activité de Node.