#c #protocol-buffers
#c #буферы протоколов
Вопрос:
Я борюсь с настройщиком протобуфа. Программа завершается всякий раз, когда я пытаюсь ее использовать.
BluetoothDevice bluetoothDevice; bluetoothDevice.set_name(std::string(name));
Кроме того, когда я использую выделенную версию задатчика с предварительно выделенным объектом, это работает. трассировка стека, которую я получаю.
Callstack Information (PID:10157) Call Stack Count: 22 0: google::protobuf::internal::ArenaStringPtr::Set(std::__cxx11::basic_stringlt;char, std::char_traitslt;chargt;, std::allocatorlt;chargt; gt; const*, std::__cxx11::basic_stringlt;char, std::char_traitslt;chargt;, std::allocatorlt;chargt; gt;amp;amp;, google::protobuf::Arena*) 0x83 (0x98adc6c8) [/usr/lib/libprotobuf-lite.so.25.0.0] 0x326c8 1: BluetoothDevice::set_name(std::__cxx11::basic_stringlt;char, std::char_traitslt;chargt;, std::allocatorlt;chargt; gt;amp;amp;) 0x58 (0x98d36a2c) [/opt/usr/globalapps/com.samsung.jrazek.flutter_blue_tizen_example/lib/libflutter_plugins.so] 0x202a2c 2: btu::BluetoothManager::notifyDiscoveryResultLE(bt_adapter_le_device_scan_result_info_s constamp;) 0x2b8 (0x98d36230) [/opt/usr/globalapps/com.samsung.jrazek.flutter_blue_tizen_example/lib/libflutter_plugins.so] 0x202230 3: btu::BluetoothManager::adapterDeviceDiscoveryStateChangedCallbackLE(int, bt_adapter_le_device_scan_result_info_s*, void*) 0xa8 (0x98d35f40) [/opt/usr/globalapps/com.samsung.jrazek.flutter_blue_tizen_example/lib/libflutter_plugins.so] 0x201f40 4: (0x989f6ee9) [/usr/lib/libcapi-network-bluetooth.so.0.6.0] 0x14ee9 5: g_variant_lookup_value 0xbec7 (0x98969ec7) [/usr/lib/libbluetooth-api.so.1.0.0] 0xbec7 6: (0x9898fb27) [/usr/lib/libbluetooth-api.so.1.0.0] 0x31b27 7: (0xb664ee17) [/usr/lib/libgio-2.0.so.0.6200.3] 0xb6e17 8: g_main_context_dispatch 0xcc (0xb68fdd85) [/usr/lib/libglib-2.0.so.0.6200.3] 0x3bd85 9: (0xb6ee5021) [/usr/lib/libecore.so.1.25.1] 0x17021 10: (0xb6ee6c45) [/usr/lib/libecore.so.1.25.1] 0x18c45 11: (0xb6ee71db) [/usr/lib/libecore.so.1.25.1] 0x191db 12: (0xb6ee775f) [/usr/lib/libecore.so.1.25.1] 0x1975f 13: (0xb6eeaf5f) [/usr/lib/libecore.so.1.25.1] 0x1cf5f 14: efl_loop_begin 0x50 (0xb6eea40d) [/usr/lib/libecore.so.1.25.1] 0x1c40d 15: ecore_main_loop_begin 0x4e (0xb6ee64c7) [/usr/lib/libecore.so.1.25.1] 0x184c7 16: appcore_base_init 0x186 (0xb5da1817) [/usr/lib/libappcore-common.so.1.15.1] 0x4817 17: appcore_ui_base_init 0x164 (0xa43894e1) [/usr/lib/libappcore-ui.so.1.15.1] 0x34e1 18: appcore_efl_base_init 0x3c (0xa43c61dd) [/usr/lib/libappcore-efl.so.1.15.1] 0x21dd 19: (0xa43d9383) [/usr/lib/libcapi-appfw-application.so.0.5.26] 0x1383 20: ui_app_main 0x80 (0xa43d9599) [/usr/lib/libcapi-appfw-application.so.0.5.26] 0x1599 21: (0xa471de91) [/usr/share/dotnet.tizen/framework/Tizen.Applications.UI.ni.dll] 0x1e91 End of Call Stack STACK_SHA256: 11fd110e322b45c53225b556f3dbafbabbf86fdcf31d563c133f84393c081a61
класс protobuf:
message BluetoothDevice { enum Type { UNKNOWN = 0; CLASSIC = 1; LE = 2; DUAL = 3; }; string remote_id = 1; string name = 2; Type type = 3; }
что я могу здесь делать не так?
Комментарии:
1. Я бы не исключил, что это ошибка в protobuf. Если вы не инициализируете сам протобуф каким-то особым способом, который не ясен из вашего вопроса, две строки, которые вы упомянули, должны работать как есть. Может быть, открыть с ними билет на GitHub.
2. @Qix-MONICAWASMISTREATED согласился, однако, OP не первый, кто использует protobuf, и код кажется чрезвычайно простым — что это может быть за ошибка?, так что там что-то есть. Моей первой линией расследования была бы коррумпированная установка. Как была установлена библиотека protobuf? Является ли он общим или статичным? Уверены ли мы, что среда выполнения C/C одинакова? Мы уверены, что ABI совместим?
3. Библиотека была создана с этой настройкой
./configure --build=x86_64-pc-linux-gnu --prefix=/home/user/libs --host=arm-linux-gnueabi CC="arm-linux-gnueabi-gcc" CXX="arm-linux-gnueabi-g "
, это общая библиотека. Также стоит упомянуть, что я использую облегченную версию protobuf. Во время создания файлов protobuf я использовалoption optimize_for = LITE_RUNTIME;
опцию