Как отличить статическую библиотеку, скомпилированную с флагом компилятора -ffunction-sections?
Я хочу определить, может ли какая-то конкретная библиотека .a извлечь выгоду из флага -Wl,--gc-sections.
Если есть способ перечислить все имена разделов, то я могу применить к нему | wc -l и сделать вывод, что разделов слишком много и библиотека, вероятно, скомпилирована с указанными флагами.
readelf -S просто печатает заархивированные имена файлов *.o.





Простой взгляд на это:
# Collect function sections
$ readelf -S tmp.o | sed -ne 's/.*\] \.text.\([a-zA-Z0-9_]\+\) .*/\1/p' | sort -u > fun_sec.lst
# Collect function symbols
$ nm tmp.o | grep ' T ' | awk '{print $3}' | sort -u > fun_sym.lst
# Compare
$ COMM=$(comm -12 fun_sym.lst fun_sec.lst | wc -l)
$ UNIQ=$(comm -3 fun_sym.lst fun_sec.lst | wc -l)
$ if test $COMM -gt $UNIQ; then echo "tmp.o was likely compiled with -ffunction-sections"; fi
@Orient: Думаю, вам не нужно ничего особенного для .a, и readelf, и nm по умолчанию проверяют все объекты внутри него. Так что просто замените tmp.o на libmy.a.
Для
*.aк нему может быть добавленpushd $( mktemp -d ) ; cp $( dirs +1 )/libmy.a . ; ar x libmy.a ; # ...(начиная с dir с интересующей библиотекойlibmy.a).