Включен OpenSSL в качестве статической библиотеки, но он все еще ищет DLL? - PullRequest
4 голосов
/ 02 ноября 2010

Я установил OpenSSL 1.0.0 в Windows, используя установщик, доступный по адресу: http://www.slproweb.com/products/Win32OpenSSL.html

Я добавил файлы .lib в свой проект (это Visual Studio, добавил его в «Настройки проекта» - «Линкер» -> «Ввод»), и он компилируется и работает нормально. Но когда я удаляю файлы DLL OpenSSL в Windows \ system32, он жалуется, что

"Debugger:: An unhandled non-continuable STATUS_DLL_NOT_FOUND exception was thrown during process load"

Есть идеи, почему она все еще ищет DLL, даже если она скомпилирована со статическими библиотеками? Я не ссылаюсь на библиотеки DLL в любом месте проекта. Статические библиотеки, которые я включил, это libeay32.lib и ssleay32.lib.

Спасибо, -М

Ответы [ 3 ]

4 голосов
/ 05 февраля 2012

используйте файл libeay32MT.lib размером почти 19 МБ в качестве библиотеки.потому что это статическая библиотека, но libeay32.lib это библиотека для использования DLL.

1 голос
/ 24 января 2013

Вы можете получить статические библиотеки здесь:

http://www.ie7pro.com/openssl/openssl-0.9.8g_static_win32.zip

(см. http://www.ie7pro.com/openssl.html).

Они построены со статическими библиотеками времени выполнения, поэтому, если вы используете VC ++, вам может потребоваться перейти на:

Свойства конфигурации -> C / C ++ -> Генерация кода -> Библиотека времени выполнения

и выберите / MT вместо / MD, чтобы избежать конфликтов связей (или, альтернативно, используйте / NODEFAULTLIB: LIBCMT и т. Д. В Linker -> Командная строка -> Дополнительные параметры).

1 голос
/ 02 ноября 2010

Он ищет библиотеки DLL, потому что код загружается динамически во время выполнения. Код в статических библиотеках - это просто набор функций-заглушек, которые вызывают в DLL - сравните размеры файлов .lib и .dll, и я уверен, что вы увидите, что библиотеки DLL намного больше, так как именно основная часть фактического кода шифрования лежит.

Следовательно, как вы узнали, вы не должны удалять библиотеки DLL. Для того, чтобы правильно распространять вашу программу, вам также необходимо распространять эти библиотеки DLL, чтобы она работала правильно. Тем не менее, имейте в виду, что с этим есть юридические проблемы, так как существуют определенные ограничения на экспорт США для определенного кода шифрования. Так что будьте предельно осторожны при перераспределении этих DLL - убедитесь, что то, что вы делаете, является законным .

...