Protobuf вызывает ошибку при инициализации при компиляции с ClangC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Protobuf вызывает ошибку при инициализации при компиляции с Clang

Сообщение Anonymous »

После перехода с GCC на LLVM для базы кода, основанной на Protobuf, я продолжаю получать ошибку сегмента во время «инициализации». При возникновении исключения никакие операции чтения/записи Protobuf не выполняются.
Трассировка стека выглядит следующим образом:

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

__dynamic_cast (@__dynamic_cast:13)
google::protobuf::Message const* google::protobuf::internal::down_cast(google::protobuf::MessageLite const*) (@google::protobuf::Message const* google::protobuf::internal::down_cast(google::protobuf::MessageLite const*):25)
google::protobuf::Message::CheckTypeAndMergeFrom(google::protobuf::MessageLite const&) (@google::protobuf::Message::CheckTypeAndMergeFrom(google::protobuf::MessageLite const&):12)
google::protobuf::MessageLite::ParseFromArray(void const*, int) (@google::protobuf::MessageLite::ParseFromArray(void const*, int):68)
google::protobuf::EncodedDescriptorDatabase::Add(void const*, int) (@google::protobuf::EncodedDescriptorDatabase::Add(void const*, int):23)
google::protobuf::DescriptorPool::InternalAddGeneratedFile(void const*, int) (@google::protobuf::DescriptorPool::InternalAddGeneratedFile(void const*, int):17)
protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptorsImpl() (@protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptorsImpl():9)
__pthread_once_slow (@__pthread_once_slow:58)
___lldb_unnamed_symbol7928 (@___lldb_unnamed_symbol7928:24)
и метод, в котором это происходит, находится в protobuf/message.cc:

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

void Message::MergeFrom(const Message& from) {
auto* class_to = GetClassData();
auto* class_from = from.GetClassData();
auto* merge_to_from = class_to ? class_to->merge_to_from : nullptr;
if (class_to == nullptr || class_to != class_from) {
merge_to_from = [](Message* to, const Message& from) {
ReflectionOps::Merge(from, to);
};
}
merge_to_from(this, from);
}
at from.GetClassData().
Я собрал Protobuf локально (Ubuntu 20.04), используя различные конфигурации с похожими результатами. Наиболее удачная конфигурация:

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

./configure CC=clang CXX="clang++ -std=c++11 -stdlib=libstdc++" --disable-shared
Я также видел в Интернете инструкции, предлагающие собрать Protobuf с использованием libc++, и в этом случае мой код не может связать.

Подробнее здесь: https://stackoverflow.com/questions/706 ... with-clang
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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