Мы используем r12b ndk с gcc для создания нашей библиотеки c ++ (с предварительно созданной библиотекой и указанием флагов вручную) и наших зависимостей (boost 1.66, openssl ... и т. Д. С автономным набором инструментов).Когда мы переключаемся на clang (как в r18b, так и в r12b), он начинает иметь сбой signal 7 (SIGBUS), code 1 (BUS_ADRALN)
ТОЛЬКО на Nexus 4. Я пробовал это на Nexus 5X и LG G6 (в режиме armv7), ни один из них не падает.
ndk-stack говорит, что сбой находится на Routine aligned at /boost/atomic/detail/storage_type.hpp:91
, но сообщение от Undefined Behavior Sanitizer указывает, что он уже получает указатель адреса смещения, прежде чем он вызовет функцию boost.
runtime error: constructor call on misaligned address 0x9b2a5008 for type 'class1', which requires 16 byte alignment
0x9b2a5008: note: pointer points here
После добавления -Wover-выравнивается, появляется следующее сообщение.Флаги
error: type 'test1' requires 16 bytes of alignment and the default allocator only guarantees 8 bytes [-Werror,-Wover-aligned]
и -fnew-alignment=16 -falign-functions -faligned-new -faligned-allocation
помогают отключить предупреждение.Но у него все та же авария с сигбусом.
Я не в себе.Любое предположение, предложение поможет.Спасибо.
РЕДАКТИРОВАТЬ: мы используем API-уровень 21 для ндк.