2010-11-02 1 views
3

Я установил OpenSSL 1.0.0 на Windows, с помощью программы установки доступна по адресу: http://www.slproweb.com/products/Win32OpenSSL.htmlВключен OpenSSL как статическая библиотека, но он все еще ищет DLL?

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

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

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

Спасибо, -М

+0

В этом дистрибутиве есть также статические .lib-файлы, размер которых составляет> 10 МБ (не знаю, почему так много). Я еще не пробовал, но, похоже, это то, что вам нужно. –

ответ

1

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

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

+0

Спасибо Адаму. Есть ли способ полностью избавиться от необходимости в DLL? Я бы предпочел просто скомпилировать статические библиотеки и не распространять DLL вместе с приложением ... Btw похоже, что файл lib - 754 КБ, а DLL - 1,09 МБ - он больше, но не намного больше. Как вы думаете, все еще просто заглушка? – mindthief

+0

Вы можете это сделать, но вам придется скомпилировать openssl как статическую библиотеку – taxilian

3

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

+0

Просто обратите внимание, что вам не нужно так беспокоиться о размере, если вы используете только часть OpenSSL. Я связал статически 24MB большой 'libeay32MT.lib', но мой результат - файл размером 1,4 МБ. –

1

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

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

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

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

Свойства конфигурации -> C/C++ -> Генерация кода -> Runtime Library

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

Смежные вопросы