Причина в том, что это. По какой -то причине я недавно писал модуль Nodejs C ++, а затем назвал его на JS. Сетевая связь, естественно, неотделима от SSL, поэтому необходимо связать библиотеку OpenSSL.
Наше первоначальное ожидание состояло в том, что пользователю необходимо установить библиотеку Runtime OpenSSL, а затем наш модуль C ++ динамически ссылается на OpenSSL, чтобы запустить библиотеку.
Сначала все выглядело довольно хорошо, пока мы не узнали, что эта функция OpenSSL не работает:
Pkcs7_sign ()
Pkcs7_sign ()
Мы нашли:
Если наш модуль C ++ динамически связан с библиотекой OpenSSL, в компиляции нет проблем. Однако, если операция происходит, ошибка, которая не может быть найдена в символе PKCS7_Sign.
Если наш модуль C ++ статически связан с библиотекой OpenSSL, нет проблем с компиляцией, но при запуске призыв к этой функции не имеет эффекта, и возвращаемое значение этой функции составляет 0. Согласно документу, произошла ошибка, но использование функции OpenSSL ERR_GET_ERROR для получения ошибки также является 0. Это означает, что нет кода ошибки.
Это верно на Linux, а как насчет Mac? Я попробовал это с Mac и обнаружил, что с Mac не было проблем. Поэтому я подумал, что это может быть ошибка в Nodejs. Затем я пошел в Nodejs и сообщил об этом ошибке: [https://github.com/joyent/node/issues/8026тки]]
В то же время я искал ключевые слова, похожие на Nodejs, ссылающиеся на OpenSSL в Google.
Нашел несколько таких статей, как это:
https://github.com/tootallnate/node-gyp/wiki/ling-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-librares
https://github.com/robhawkes/node-extension/issues/1
Благодаря поиску мы обнаружили, что сама Nodejs также использовала библиотеку OpenSSL. Предполагается, что собственный крипто -модуль Nodejs также реализован с использованием OpenSsl Lib. Это можно найти из исходного кода Nodejs, который содержит весь последний исходный код OpenSSL.
Красивый парень, который написал первую статью выше: https://github.com/tootallnate/node-gyp/wiki/ling-to-openssl, является разработчиком Nodejs.
Основной вывод:
Nodejs использует сам openssl
Перед Nodejs 0,6 Nodejs был динамически связан с библиотекой OpenSSL. Последующие версии были статически связаны.
В настоящее время я обнаружил, что Узел ответил на мою ошибку: https://github.com/joyent/node/issues/8026
Узел объясняет, почему:
После того, как узел компилировал себя, он очищает символы, которые он не использует, поэтому мы не можем найти символы при запуске. Таким образом, они исправили ошибку и сохранили все символы. Это привело к тому, что узел был на 400 тысяч больше.
Благодаря узлу за его быстрый ответ, я должен восхищаться уровнем активности узла. Нравиться.