📄 get-needed-libgcc-objects.sh
字号:
#!/bin/sh## Manuel Novoa III Jan 2001## The purpose of this script is to extract the object files from libgcc.a# that are needed by the shared uClibc so that they won't be linked with# each application.## I'm sure people with better shell programming skills can improve this.# Feel free! ;-) At this point though, it gets the job done for me.## Possible problems (paranioa mode): Are any of the objects in libgcc.a# needed to actually load the shared library on any archs?LIBGCC=`$CC -print-libgcc-file-name`echo Finding missing symbols in libc.a ...echo " partial linking..."rm -f libc.ldr$LD -r -o libc.ldr ../crt0.o --whole-archive ../libc.aif $NM --undefined-only libc.ldr | grep -v "^main$" > sym.need ; then rm -f obj.need touch obj.need for SYM in `cat sym.need | sed -e 's/ U //g'` ; do if $NM -s $LIBGCC | grep -q $SYM" in " ; then $NM -s $LIBGCC | grep $SYM" in " | cut -d' ' -f3 >> obj.need else echo Symbol $SYM needed by libc.a but not found in libgcc.a fi doneelse echo No missing symbols found. exit 0firm -rf tmp-gccmkdir tmp-gcc(cd tmp-gcc ; $AR -x $LIBGCC)rm -f libgcc.ldrecho Extracting referenced libgcc.a objects ...rm -f obj.need.0touch obj.need.0while [ -s obj.need ] && ! cmp -s obj.need obj.need.0 ; do (cd tmp-gcc ; cat ../obj.need | uniq | xargs $LD -r -o ../libgcc.ldr) cp obj.need obj.need.0 if $NM --undefined-only libgcc.ldr > sym.need ; then for SYM in `cat sym.need | sed -e 's/ U //g'` ; do if $NM -s $LIBGCC | grep -q $SYM" in " ; then $NM -s $LIBGCC | grep $SYM" in " | cut -d' ' -f3 >> obj.need fi done fidonecat obj.need | sort | uniq > obj.need.0(cd tmp-gcc ; cp `cat ../obj.need` ..)if [ -s obj.need.0 ] ; then echo Objects added from $LIBGCC: cat obj.need.0 (cd tmp-gcc ; cat ../obj.need | uniq | xargs $AR r ../libgcc-need.a)else echo No objects added from $LIBGCC.fiif [ -s sym.need ] ; then echo Symbols missing from libgcc.a: cat sym.needelse echo Donefiexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -