如何区分用-ffunction-sections
编译器标志编译的静态库?
我想确定一些特定的.a
库可以从-Wl,--gc-sections
标志中受益。
如果有方法列出所有部分名称,那么我可以将| wc -l
应用于它并推断出有太多部分,并且库可能使用提到的标志进行编译。
readelf -S
只打印已归档的*.o
文件名。
答案 0 :(得分:1)
一个简单的看法:
# 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