Как статически связать cpprest без dll файлов в проекте VS? - PullRequest
1 голос
/ 12 мая 2019

Я наконец связал Casablanca / CPPRESTSDK с VS17, спасибо за этот пост Статически связываю Casablanca / CPPREST SDK и некоторые другие. Но теперь я вижу, что когда я запускаю проект, по какой-то причине VS автоматически генерирует 3 DLL-файла zlib1.dll SSLEAY32.dll LIBEAY32.dll в папке с .exe, но я на самом деле статически связывался, чтобы их вообще не было. У меня также есть эти файлы в формате lib в vcpkg-master\installed\x86-windows-static\lib, могу ли я как-то использовать их вместо DLL?

1 Ответ

0 голосов
/ 24 июля 2019

У меня была такая же проблема. У меня есть решение 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.

Надеюсь, это поможет кому-то сэкономить несколько часов, которые я потерял, чтобы заставить его работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...