【发布时间】:2014-08-26 19:29:39
【问题描述】:
我正在使用 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 部分的整体大小,这并不是特别有用。我还查看了建议 here 并尝试使用 nm,但它太具体 - 我只是一堆名称混乱的符号,如 _ZN2v88internal11FLAG_log_gcE。
【问题讨论】:
-
尝试不同的工具链(如 Linaro 的)来解决工具链问题。