Трассировка стека выглядит следующим образом:
Код: Выделить всё
__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)
Код: Выделить всё
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);
}
Я собрал Protobuf локально (Ubuntu 20.04), используя различные конфигурации с похожими результатами. Наиболее удачная конфигурация:
Код: Выделить всё
./configure CC=clang CXX="clang++ -std=c++11 -stdlib=libstdc++" --disable-shared
Подробнее здесь: https://stackoverflow.com/questions/706 ... with-clang
Мобильная версия