Инструменты и версии: Visual Sudio 2017, Google Protobufs 3.11.3, gRP C 1.27.1, vcpkg 2020.02.04, в Microsoft Windows
Я использовал vcpkg для сборки Windows нативные C ++ версии gRP C и protobuf (и другие зависимости) для Windows (x86). Все строится успешно.
Когда я создаю свое приложение, я включаю "libprotobuf.lib" в качестве входных данных компоновщика. Тем не менее, это не связано. Вместо этого моя программа будет работать только в том случае, если для загрузки программы присутствует «libprotobuf.dll». Я не знаю другого способа указать, что библиотека должна быть статически связана.
Во время сборки моего приложения я вижу много предупреждений, подобных этому: include \ google \ protobuf \ duration.pb. h (220): предупреждение C4251: 'google :: protobuf :: Duration :: _ internal_metadata_': class 'google :: protobuf :: internal :: InternalMetadataWithArena' должен иметь dll-интерфейс для использования клиентами класса 'google: * ссылаться на библиотеку по-другому.
Я также видел эту страницу , которая предлагает решение. Это немного помогло. Это заставляло Visual Studio распознавать неразрешенные внешние объекты, поэтому, по крайней мере, оно пыталось статически связать файлы .lib. Имея это в виду, я попробовал различные комбинации файлов .lib для protobuf, grp c и зависимостей, но все еще не могу получить успешную сборку - и предупреждения компилятора по-прежнему генерируются.
I я чувствую, что во время сборки vcpkg что-то упускается (возможно, определение препроцессора), что могло бы по-разному создавать заголовки или библиотеки. Я пытался изменить некоторые параметры сборки, но они всегда перезаписывались, когда vcpkg генерирует файлы cmake для сборки.
Или мне не хватает правильной комбинации библиотечных файлов для ссылки из моего проекта.
Кто-нибудь заставил это работать? Если у вас есть примеры создания библиотек для статического связывания c через vcpkg или правильный способ связать библиотеки в проекте VS2017, не могли бы вы поделиться своей информацией?