之前對strip還一臉懵逼,剛好在makefile中搜索到關鍵字,依葫蘆畫瓢測試一波,果然成功了,後來發現只要一條命令就解決的事情。還是記錄下自己解決問題的過程吧。
修改grpc目錄下的makefile
修改前:
修改後:
將自己要strip的庫添加進去,庫文件存放的路徑是在grpc/libs/opt下。
執行命令
make strip-shared_c -j8 HAS_PKG_CONFIG=false CC=arm-oe-linux-gnueabi-gcc CXX=arm-oe-linux-gnueabi-g++ RANLIB=arm-oe-linux-gnueabi-ranlib LD=arm-oe-linux-gnueabi-ld LDXX=arm-oe-linux-gnueabi-g++ AR=arm-oe-linux-gnueabi-ar STRIP=arm-oe-linux-gnueabi-strip CPP=arm-oe-linux-gnueabi-cpp PREFIX=/home/workspace/test/arm_install PROTOBUF_CONFIG_OPTS="--host=arm-oe-linux-gnueabi --with-protoc=/usr/local/bin/protoc"
壓縮成功:
後面百度一下,查找資料發現其實可以單獨使用命令來對已經編譯完的動態庫進行壓縮。測試發現libgrpc.so.9沒有變化,那麼說明它編譯過程中已經有strip過了。
man strip
再查看交叉編譯的arm-oe-linux-gnueabi-strip.
原來arm-oe-linux-gnueabi-strip並不是壓縮庫而是去除一些調試信息和符號信息。
爲了保證動態庫正常使用,使用–strip-unneeded。刪除所有不需要重新定位的符號。保留一些可用的符號。
哎,之前沒搞過,原來只要一條命令就解決的問題。
arm-oe-linux-gnueabi-strip --strip-unneeded libgrpc++_reflection.so
庫大小的問題算是解決了,開始看看example源碼學習下grpc與protobuf如何使用吧。