Как настроить Visual Studio для сборки библиотеки Boost, включая заголовочный файл asio/ssl.hpp?

Я собрал OpenSSL в двух версиях: x86 release static и x86 release shared (динамическая версия с DLL). В настройках проекта добавил путь к папке include в additional include directories, а путь к папке lib указал в additional library directories. В списке зависимостей указал libcrypto.lib и libssl.lib. 

Код я еще не писал, просто пробую подключить ssl.hpp. Однако при сборке получаю ошибки: 
LNK2001 unresolved external symbol "ERR_lib_error_string" 
LNK2001 unresolved external symbol "ERR_reason_error_string". 

Почему проект не может найти указанные библиотеки? Возможно, я подключаю неправильные lib-файлы? Судя по гайдам, все должно быть правильно. Замечу, что независимо от того, использую ли я динамическую или статическую сборку, ошибки остаются одинаковыми.
  • 13 октября 2024 г. 18:03
Ответы на вопрос 1
Ваши ошибки LNK2001 связаны с недостающими символами из библиотеки OpenSSL. Эта проблема часто возникает из-за неправильного подключения библиотек или из-за несовпадения между используемыми заголовочными файлами и библиотеками. Давайте разберем возможные причины и решения.

### Возможные причины

1. **Неправильное подключение библиотек**:
   Убедитесь, что вы добавили все необходимые библиотеки в зависимости вашего проекта. Для OpenSSL, особенно для использования с Boost.Asio, важно правильно указать все необходимые библиотеки. Кроме `libcrypto.lib` и `libssl.lib`, также может потребоваться подключение других библиотек, таких как `libssl_static.lib` и `libcrypto_static.lib`, если вы используете статическую сборку.

2. **Версия библиотек**:
   Убедитесь, что версии библиотек OpenSSL и их заголовочных файлов совпадают. Иногда бывает сложно настраивать проект, когда версии заголовков и библиотек отличаются.

3. **Конфигурация проекта**:
   Убедитесь, что вы используете правильные конфигурации сборки (Debug/Release) и архитектуру (x86/x64). Например, если вы собираете проект конфигурации Release для x86, убедитесь, что подключенные библиотеки именно этой конфигурации.

4. **Проблемы с путями**:
   Убедитесь, что пути к библиотекам и заголовочным файлам введены правильно в `Additional Include Directories` и `Additional Library Directories`.

### Рекомендуемые шаги для исправления

1. Проверьте правильность подключения библиотек:
   - Перейдите в свойства проекта > Linker > Input, и в `Additional Dependencies` проверьте наличие следующего:
     ```
     libssl.lib;libcrypto.lib;
     ```
   - Если вы используете статическую сборку OpenSSL, добавьте `libssl_static.lib` и `libcrypto_static.lib`.

2. Убедитесь, что все пути указаны верно:
   - Для `Additional Include Directories` укажите путь к папке с заголовками OpenSSL (например, `C:\OpenSSL\include`).
   - Для `Additional Library Directories` укажите путь к папке с библиотеками OpenSSL (например, `C:\OpenSSL\lib`).

3. Проверьте использование правильной конфигурации:
   - Убедитесь, что при сборке проекта вы выбрали нужную конфигурацию (Release или Debug) и платформу (x86 или x64), и что соответствующие библиотеки OpenSSL подключены.

4. Если у вас установлены несколько версий OpenSSL, проверьте, не мешают ли они друг другу.

5. Если проблема не решается, попробуйте ввести `#pragma comment(lib, "libssl.lib")` и `#pragma comment(lib, "libcrypto.lib")` в ваш исходный файл для явного указания компилятору на подключение библиотек.

Если после выполнения всех этих шагов проблемы останутся, пожалуйста, предоставьте больше информации о конфигурации сборки, чтобы я мог помочь более детально.
Похожие вопросы