我正在使用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
.