分析ELF二进制文件以最小化其大小

 M-pp威_703 发布于 2022-12-25 16:22

我正在使用GCC arm-gnueabi交叉编译器将V8项目交叉编译为嵌入式ARM目标.我成功地对V8库进行了交叉编译,作为一个冒烟测试,我想将它链接到Google的hello world示例并在ARM板上运行它.

这些库本身的时钟超过1.2 MB:

v8 % find out/arm.release/obj.target/ -name '*.a' -exec du -h {} + 
1.2M    out/arm.release/obj.target/tools/gyp/libv8_base.a
12K     out/arm.release/obj.target/tools/gyp/libv8_libbase.a
4.0K    out/arm.release/obj.target/tools/gyp/libv8_libplatform.a
4.0K    out/arm.release/obj.target/tools/gyp/libv8_snapshot.a
4.0K    out/arm.release/obj.target/tools/gyp/libv8_nosnapshot.a
4.0K    out/arm.release/obj.target/third_party/icu/libicudata.a
164K    out/arm.release/obj.target/third_party/icu/libicuuc.a
336K    out/arm.release/obj.target/third_party/icu/libicui18n.

然而,当我建立和链接

arm-linux-gnueabi-g++ -pthread -Iv8/include hi.cpp -Os -o hi_v8 -Wl,--start-group v8/out/arm.release/obj.target/{tools/gyp/libv8_{base,libbase,snapshot},third_party/icu/libicu{uc,i18n,data}}.a -Wl,--end-group

我得到一个20 MB的可执行文件.剥离它只能让我降到17 MB

那个气球链接的文件大小如此之多?我怎么能避免呢?我可以使用哪些工具来诊断问题?在我定位的平台上,此大小可能会出现问题.

我已经看了一下readelf --sections,但它只是告诉我整个.text部分的大小,这不是特别有用.我也看了一下这里的建议并尝试使用nm,但它具体了 - 我只是一堆名称错误的符号_ZN2v88internal11FLAG_log_gcE.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有