Почему существует несколько libgcc.a, поставляемых с Android NDK, с которыми нужно связываться? - PullRequest
0 голосов
/ 04 сентября 2018

Android NDK 17 (и я полагаю, более ранние версии), содержит несколько версий libgcc.a:

android-ndk-r17b/toolchains/arm-linux-androideabi-4.9$ find -iname 
libgcc.a
./prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
./prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/libgcc.a
./prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/hard/libgcc.a
./prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb/libgcc.a
./prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb/hard/libgcc.a
./prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/thumb/libgcc.a

То же самое для libatomic.a

android-ndk-r17b/toolchains/arm-linux-androideabi-4.9$ find -iname libatomic.a
./prebuilt/linux-x86_64/arm-linux-androideabi/lib/libatomic.a
./prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/libatomic.a
./prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/hard/libatomic.a
./prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb/libatomic.a
./prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb/hard/libatomic.a
./prebuilt/linux-x86_64/arm-linux-androideabi/lib/thumb/libatomic.a

Каждый из содержащихся каталогов содержит полный набор crtbegin.o, crtend.o и т. Д. *

$ ls ./prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/
crtbegin.o  crtbeginS.o  crtbeginT.o  crtend.o  crtendS.o  libgcc.a  libgcov.a

Проверяя каждый, они имеют разный размер (и я предполагаю содержание).

  • В чем различия между этими версиями?
  • Какие из них должны использоваться компоновщиком для создания действительного .so файла?

1 Ответ

0 голосов
/ 04 сентября 2018
  • thumb относится к набору команд (большинство процессоров ARM имеют разные режимы работы с переключением во время выполнения, которые предоставляют разные наборы команд). Не большой палец предположительно означает arm.
  • hard относится к варианту ABI, определяющему, как аргументы с плавающей запятой передаются в функции (теперь это устарело, AFAIK).
  • Библиотеки, не имеющие armv7-a в пути, предположительно предназначены для устаревшей armeabi (т.е. ARMv5TE).
...