NDK12b: разные ELF, созданные clang и gcc с использованием автономной цепочки инструментов и одних и тех же сценариев сборки.

Наш продукт содержит несколько исходных пакетов. Некоторые исходные пакеты собраны с использованием autotool/conf.

Основываясь на том, что Google сказал о переключении на clang в качестве компилятора по умолчанию для NDK, начиная с NDK-13, мы продолжили работу с переключением в файлах *.mk, а также в наших сценариях настройки и сборки env. Нет сделать файлы, где были изменены.

Мы использовали старый NDK-10d, поэтому перешли на NDK-12b. Мы также создали из него отдельную цепочку инструментов, как это рекомендовано в документации Android, чтобы упростить наши сценарии сборки и стандартизировать их для всех.

Проблема, с которой я сталкиваюсь, - это сбой при запуске, как только загружается собственный код. Что я заметил, так это предупреждение в logcat относительно: unused DT entry: type 0x6ffffffe (VERNEED) и 0x6fffffff (VERNEEDNUM).

Затем страшное: A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x30 in tid 22246.

Трассировка стека говорит мне очень и очень мало:

08-11 15:31:02.421 128-128/? I/DEBUG:     #00 pc 00036b8c  /system/lib/libc.so
08-11 15:31:02.421 128-128/? I/DEBUG:     #01 pc 0003817b  /system/lib/libc.so (vfprintf+18)
08-11 15:31:02.421 128-128/? I/DEBUG:     #02 pc 00035251  /system/lib/libc.so (fprintf+12)
08-11 15:31:02.421 128-128/? I/DEBUG:     #03 pc 000015fd  /data/app/com.myapp.demo-1/lib/arm/libappdebug.so (pipe_listen+328)
08-11 15:31:02.421 128-128/? I/DEBUG:     #04 pc 0001659b  /system/lib/libc.so
08-11 15:31:02.421 128-128/? I/DEBUG:     #05 pc 000144c3  /system/lib/libc.so

Обратите внимание, что сравнение данных в файлах ELF, выгруженных readelf -d, показывает отсутствие этих двух записей DT в двоичных файлах, сгенерированных сборками arm-linux-androideabi-gcc-4.9.

Любые идеи, указатели, ... вообще что угодно ..., были бы очень признательны, потому что я застрял на (румянец) 3 дня.

Спасибо.


person user3342339    schedule 12.08.2016    source источник
comment
Было бы лучше, если бы вы показали разницу в выводе readelf -d для двух версий...   -  person not2qubit    schedule 04.02.2017


Ответы (1)


Вам нужно изучить проблему вашего unused DT entry. Если вы используете свою библиотеку для передачи данных куда-то еще, это предупреждение будет появляться при каждом запуске и подвергать опасности ваш канал для получения мусора или ваше приложение для получения исключений. Пожалуйста, взгляните на мой пост здесь.

person not2qubit    schedule 27.01.2017