Неразрешенный внешний символ google::protobuf::internal::fixed_address_empty_string при связывании статического libprotoC++

Программы на C++. Форум разработчиков
Anonymous
Неразрешенный внешний символ google::protobuf::internal::fixed_address_empty_string при связывании статического libproto

Сообщение Anonymous »

Я загрузил двоичные файлы gRPC из thommyho/Cpp‑gRPC‑Windows‑PreBuilts (предварительно созданные двоичные файлы и библиотеки gRPC для Windows | x64 и x86 | MSVC143, MSVC142 (устаревшие версии 141 и 140) | Debug, Release, RelWithDebInfo, версия v1.76.0).

Среди файлов есть библиотеки, такие как libprotobuf.lib и т. д.
Когда я использую этот libprotobuf (думаю, это статическая версия), я всегда получаю ошибку компоновщика:

Код: Выделить всё

unresolved external symbol
"class google::protobuf::internal::GlobalEmptyStringConstexpr const
google::protobuf::internal::fixed_address_empty_string"
Если вместо этого я возьму libprotobuf из свежего клона репозитория protobuf, добавлю соответствующий protobuf.dll в папку, определю макрос препроцессора PROTOBUF_USE_DLLS и свяжу его с DLL, клиентская сторона собирается и работает нормально.
Что касается серверной стороны, я пытаюсь сделать то же самое, добавив также библиотеку g++_reflection и написав:

Код: Выделить всё

   #include 
grpc::reflection::InitProtoReflectionServerBuilderPlugin();
Когда я использую DLL-версию protobuf вместе с плагином отражения, я получаю гораздо больше неразрешенных внешних символов.

Если я переключусь обратно на статическую библиотеку libprotobuf.lib, поставляемую с двоичными файлами gRPC, большинство этих ошибок исчезнут, оставив только ошибку fix_address_empty_string.
Похоже, возникла проблема с символ fix_address_empty_string в статической библиотеке libprotobuf.lib?
(в конце все работает нормально, потому что я могу найти обходные пути, но это все равно кажется странным)

Подробнее здесь: https://stackoverflow.com/questions/798 ... mpty-strin

Вернуться в «C++»