У меня была такая же проблема. У меня есть решение Visual Studio с проектами, использующими MFC в общей DLL и использующей многопоточную библиотеку времени выполнения DLL. Я хотел статически связать cpprestsdk без трех дополнительных DLL для распространения. Ссылка на статическую версию cpprestsdk не работала: я не мог связать ее из-за конфликтующих библиотек времени выполнения (/MT
- многопоточная и /MD
- многопоточная DLL). Я не смог найти предварительно скомпилированную версию, которая использовала бы переключатель /MD
(многопоточная DLL), но экспортированная как библиотека. Поэтому мне пришлось самому скомпилировать.
Мое решение:
- download
vcpkg
(https://github.com/microsoft/vcpkg). Это менеджер пакетов библиотек C и C ++. Вам нужно его "загрузить". См. Быстрый старт.
- установить необходимые зависимости для cpprestsdk: `vcpkg install --triplet x86-windows zlib openssl boost-система boost-date-time boost-regex boost-interprocess websocketpp brotli
- скачать cpprestsdk с github (https://github.com/Microsoft/cpprestsdk)
- создать файл решения Visual Studio (https://github.com/microsoft/cpprestsdk/wiki/How-to-build-for-Windows). Я хотел создать версию x86, поэтому мне пришлось использовать следующую команду
cmake ../Release -A win32 -DCMAKE_TOOLCHAIN_F ILE=d:\jw\git\vcpkg\scripts\buildsystems\vcpkg.cmake
.
- откройте
cpprestsdk.sln
решение и выполните следующие действия для конфигураций выпуска и отладки в проекте cpprest
:
- изменить тип конфигурации на Статическую библиотеку
- изменить расширение целевого файла на
.lib
.
- сборка отладочной и выпускной версий.
Затем я мог бы использовать сгенерированные библиотеки в своем решении.
- добавить каталог cpprestsdk include в мой проект
- добавить библиотеки cpprestsdk в компоновщик. Input
- добавить библиотеки zlib и openssl из каталога cpprestsdk
packages
.
- добавить библиотеки
bcrypt.lib
, winhttp.lib
и crypt32.lib
к входу компоновщика ( Статическое связывание Casablanca / CPPREST SDK )
- вам также нужно добавить флаг препроцессора
_NO_ASYNCRTIMP
в проект, где вы используете cpprestsdk.
Надеюсь, это поможет кому-то сэкономить несколько часов, которые я потерял, чтобы заставить его работать!