Penyebab masalahnya adalah ini. Untuk beberapa alasan, saya telah menulis modul C ++ NodeJs baru -baru ini dan kemudian menyebutnya di JS. Komunikasi jaringan secara alami tidak dapat dipisahkan dari SSL, jadi perlu untuk menautkan ke perpustakaan Openssl.
Harapan asli kami adalah bahwa pengguna perlu menginstal pustaka runtime OpenSSL, dan kemudian modul C ++ kami secara dinamis menautkan ke OpenSSL sehingga perpustakaan untuk dijalankan.
Semuanya terlihat cukup bagus pada awalnya sampai kami mengetahui bahwa fungsi OpenSSL ini tidak berhasil:
Pkcs7_sign ()
Pkcs7_sign ()
Kami menemukan:
Jika modul C ++ kami secara dinamis terkait dengan pustaka OpenSSL, tidak ada masalah dalam menyusun. Namun, jika operasi terjadi, kesalahan yang tidak dapat ditemukan di simbol PKCS7_SIGN.
Jika modul C ++ kami secara statis terkait dengan pustaka OpenSSL, tidak ada masalah dengan kompilasi, tetapi ketika berjalan, panggilan ke fungsi ini tidak berpengaruh, dan nilai pengembalian fungsi ini adalah 0. Menurut dokumen, terjadi kesalahan, tetapi menggunakan fungsi OpenSSL ERR_GET_ERROR untuk mendapatkan kode kesalahan juga 0. Itu berarti tidak ada kode kesalahan.
Ini benar di Linux, bagaimana dengan di Mac? Saya mencobanya dengan Mac dan menemukan bahwa tidak ada masalah dengan Mac. Jadi saya pikir ini mungkin bug di nodeJs. Lalu saya pergi ke nodejs dan melaporkannya bug: [https://github.com/joyent/node/issues/8026 media Mah]]
Pada saat yang sama, saya mencari kata kunci yang mirip dengan nodeJS yang menautkan ke OpenSSL di Google.
Menemukan beberapa artikel seperti ini:
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
Melalui pencarian, kami menemukan bahwa nodej sendiri juga menggunakan pustaka OpenSSL. Dispekulasi bahwa modul crypto Nodejs sendiri juga diimplementasikan menggunakan OpenSSL LIB. Ini dapat ditemukan dari kode sumber nodejs, yang berisi semua kode sumber OpenSSL terbaru.
Pria tampan yang menulis artikel pertama di atas: https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl adalah pengembang nodejs.
Kesimpulan Dasar:
NodeJS menggunakan openssl itu sendiri
Sebelum nodeJS 0.6, nodeJS secara dinamis dikaitkan dengan pustaka OpenSSL. Versi selanjutnya secara statis terkait.
Pada saat ini, saya menemukan bahwa Node telah membalas bug saya: https://github.com/joyent/node/issues/8026
Node menjelaskan mengapa:
Setelah node mengkompilasi dirinya sendiri, itu membersihkan simbol yang tidak digunakan, jadi kami tidak dapat menemukan simbol saat berjalan. Jadi mereka memperbaiki bug dan mempertahankan semua simbol. Ini menyebabkan node menjadi 400 ribu lebih besar.
Terima kasih kepada Node untuk balasan cepatnya, saya harus mengagumi tingkat aktivitas Node. Menyukai.