2016-08-12 4 views
2

Наш продукт содержит несколько исходных пакетов. Некоторые исходные пакеты создаются с помощью autotool/conf.NDK12b: Различные ELF, созданные clang vs gcc, используя автономную инструментальную цепочку и те же скрипты сборки

Основываясь на том, что 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 

Обратите внимание, что сравнение данных в пределах Эльфы, как сбрасывали на readelf -d показывает отсутствие этих 2 DT записи в двоичные файлы, порожденную руки-Linux -androideabi-gcc-4.9 строит.

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

Спасибо.

+0

Это помогло бы, если бы вы показали разницу в выходе из 'readelf -d' для двух версий ... – not2qubit

ответ

0

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