Aquí está la cosa. Por alguna razón, he estado escribiendo un módulo c para Nodejs y llamándolo desde el lado js. La comunicación de red es naturalmente inseparable de SSL, por lo que debemos vincularnos a la biblioteca Openssl. Nuestra expectativa es que los usuarios necesiten instalar la biblioteca de tiempo de ejecución de Openssl, y luego nuestro módulo c se vinculará dinámicamente a la biblioteca de Openssl para ejecutarse. Todo parecía ir bien al principio, hasta que descubrimos que la función openssl no funcionaba: PKCS7_sign() PKCS7_sign( ) Descubrimos que si nuestro módulo c estaba vinculado dinámicamente a la biblioteca openssl, la compilación funcionaría bien. Sin embargo, si lo ejecutamos, obtenemos el error: Símbolo PKCS7_sign no encontrado. Si nuestro módulo c está vinculado estáticamente a la biblioteca openssl, se compila bien, pero en tiempo de ejecución, la llamada a esta función no tiene ningún efecto y la función devuelve 0. Según la documentación, esto significa que ocurrió un error, pero obtener el código de error usando la función Openssl ERR_get_error también devuelve 0. Esto es cierto en Linux, pero ¿qué pasa con Mac? Lo probé en mi Mac y funcionó bien. Entonces creo que esto podría ser un error de Nodejs. Fui a Nodejs e informé de un error: [/joyent/node/issues/8026][1][1] Mientras tanto, busqué en Google enlaces de nodejs a openssl y palabras clave similares. Encontré el siguiente artículo:
/TooTallNate/node-gyp/wiki/Linking-OpenSSL
/joyent/node/issues/3915
/questions/ 338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraries
/robhawkes/node-extension/issues/1
Aprobado Al buscar, encontramos que el propio Nodejs usa la biblioteca Openssl. Se supone que el módulo de cifrado de nodejs también se implementa utilizando la biblioteca Openssl. Esto se puede ver en el código fuente de Nodejs, que contiene el código fuente más reciente de Openssl. El autor del primer artículo anterior
/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL
es un desarrollador de Nodejs. Conclusión básica Nodejs usa Openssl de forma nativa. Antes de Nodejs 0.6, Nodejs se vinculaba dinámicamente a la biblioteca Openssl. Ha estado estático desde entonces. Me di cuenta de que Node había respondido a mi error:
/joyent/node/issues/8026
Node explicó por qué: Node se compila solo y luego elimina los símbolos no utilizados, por lo que no podemos encontrarlos en tiempo de ejecución. Por lo tanto, solucionaron el error. Mantuvieron todos los símbolos. Esto resultó en que el Nodo se volviera 400.000 más grande.