2016-05-30 2 views
5

Я построить OpenSSL вручную (статические библиотеки) следующие this guide теперь, когда я пытаюсь связать мой MFC тестовое приложение с libeay32.lib я получаю следующие ошибки:связь с OpenSSL Lib статически

1>Linking... 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function _capi_free_key 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function _capi_get_prov_info 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertOpenSto[email protected] referenced in function _capi_open_store 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function _capi_find_cert 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function _capi_find_cert 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function _capi_find_key 
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function _capi_load_ssl_client_cert 

Любые советы? Заранее спасибо.

EDIT: Я использовал исходный код OpenSSL 1.0.1t и командную строку Visual Studio 2008 для создания 32-битных статических библиотек (у меня не было успеха с версией 1.0.2h). Мое тестовое приложение прекрасно работает при динамическом связывании, но я хочу иметь возможность связываться со статическими библиотеками. Я использую OpenSSL для EVP симметричного шифрования и дешифрования

ответ

12

когда я пытаюсь связать мой MFC тестовое приложение с libeay32.lib я получаю следующие ошибки ...

Вам нужно настроить с enable-capieng. Также см. Compilation and Installation на вики OpenSSL и How to use CAPI engine in OpenSSL архив списка рассылки.

error LNK2019: unresolved external symbol [email protected] referenced in function _capi_free_key 
... 

После того, как настроен правильно, вы должны связать против crypt32.lib библиотеки Windows. См., Например, CertFreeCertificateContext functions. В операционной системе Windows, оно должно быть достаточно, чтобы добавить следующую строку в ваш исходный файл MSVC:

#pragma comment (lib, "crypt32"); 
+0

Привет, спасибо за повтор, я новичок в отношении OpenSSL и не вполне может следовать за вами, я боюсь. Я редактировал свой вопрос, предоставляя больше информации о моей среде. Я сделал точно так же, как сказал учебник для создания 32-битных статических библиотек, и ничего не было сказано для настройки с помощью опции enable-capieng? После добавления #pragma comment (lib, "crypt32"); мое приложение скомпилировано и работает, но я получаю утечки памяти при закрытии приложения – cagi

+0

@cagi - OpenSSL полон утечек памяти. Возможно, что ваше приложение делает все правильно, но все же ловя на них выводы. Однако перед тем, как отключить утечку памяти в качестве внутренних проблем OpenSSL, перед очисткой обязательно очистите. Для этого см. [Как правильно uninitialize OpenSSL] (http://stackoverflow.com/q/29845527). – jww

+0

Уверен, спасибо снова @jww – cagi