weirdnessGCC Giảm Binary Bloat - Strange Side Effect
tôi đã biên soạn Google Nghị định thư Buffers không sử dụng các thông số bổ sung cho một "sưng" biên dịch và biên dịch bằng lệnh sau ./configure CXXFLAGS="-ffunction-sections -fdata-sections"
. một du-h tiết lộ:
120K ./bloat/bin
124K ./bloat/include/google/protobuf/io
8.0K ./bloat/include/google/protobuf/compiler/java
12K ./bloat/include/google/protobuf/compiler/python
8.0K ./bloat/include/google/protobuf/compiler/cpp
128K ./bloat/include/google/protobuf/compiler
52K ./bloat/include/google/protobuf/stubs
848K ./bloat/include/google/protobuf
852K ./bloat/include/google
856K ./bloat/include
12K ./bloat/lib/pkgconfig
37M ./bloat/lib
38M ./bloat
20K ./unbloat/bin
124K ./unbloat/include/google/protobuf/io
8.0K ./unbloat/include/google/protobuf/compiler/java
12K ./unbloat/include/google/protobuf/compiler/python
8.0K ./unbloat/include/google/protobuf/compiler/cpp
128K ./unbloat/include/google/protobuf/compiler
52K ./unbloat/include/google/protobuf/stubs
848K ./unbloat/include/google/protobuf
852K ./unbloat/include/google
856K ./unbloat/include
12K ./unbloat/lib/pkgconfig
15M ./unbloat/lib
16M ./unbloat
53M .
khoan Down:
ls -gGh bloat/lib/
total 37M
-rw-r--r-- 1 13M 2010-09-07 13:57 libprotobuf.a
-rwxr-xr-x 1 986 2010-09-07 13:57 libprotobuf.la
-rw-r--r-- 1 1.6M 2010-09-07 13:57 libprotobuf-lite.a
-rwxr-xr-x 1 1021 2010-09-07 13:57 libprotobuf-lite.la
lrwxrwxrwx 1 25 2010-09-07 13:57 libprotobuf-lite.so -> libprotobuf-lite.so.6.0.0
lrwxrwxrwx 1 25 2010-09-07 13:57 libprotobuf-lite.so.6 -> libprotobuf-lite.so.6.0.0
-rwxr-xr-x 1 771K 2010-09-07 13:57 libprotobuf-lite.so.6.0.0
lrwxrwxrwx 1 20 2010-09-07 13:57 libprotobuf.so -> libprotobuf.so.6.0.0
lrwxrwxrwx 1 20 2010-09-07 13:57 libprotobuf.so.6 -> libprotobuf.so.6.0.0
-rwxr-xr-x 1 5.5M 2010-09-07 13:57 libprotobuf.so.6.0.0
-rw-r--r-- 1 12M 2010-09-07 13:57 libprotoc.a
-rwxr-xr-x 1 1.1K 2010-09-07 13:57 libprotoc.la
lrwxrwxrwx 1 18 2010-09-07 13:57 libprotoc.so -> libprotoc.so.6.0.0
lrwxrwxrwx 1 18 2010-09-07 13:57 libprotoc.so.6 -> libprotoc.so.6.0.0
-rwxr-xr-x 1 4.6M 2010-09-07 13:57 libprotoc.so.6.0.0
drwxr-xr-x 2 4.0K 2010-09-07 13:57 pkgconfig
ls -gGh unbloat/lib/
total 15M
-rw-r--r-- 1 5.8M 2010-09-07 14:03 libprotobuf.a
-rwxr-xr-x 1 988 2010-09-07 14:03 libprotobuf.la
-rw-r--r-- 1 764K 2010-09-07 14:03 libprotobuf-lite.a
-rwxr-xr-x 1 1023 2010-09-07 14:03 libprotobuf-lite.la
lrwxrwxrwx 1 25 2010-09-07 14:03 libprotobuf-lite.so -> libprotobuf-lite.so.6.0.0
lrwxrwxrwx 1 25 2010-09-07 14:03 libprotobuf-lite.so.6 -> libprotobuf-lite.so.6.0.0
-rwxr-xr-x 1 393K 2010-09-07 14:03 libprotobuf-lite.so.6.0.0
lrwxrwxrwx 1 20 2010-09-07 14:03 libprotobuf.so -> libprotobuf.so.6.0.0
lrwxrwxrwx 1 20 2010-09-07 14:03 libprotobuf.so.6 -> libprotobuf.so.6.0.0
-rwxr-xr-x 1 2.7M 2010-09-07 14:03 libprotobuf.so.6.0.0
-rw-r--r-- 1 3.7M 2010-09-07 14:04 libprotoc.a
-rwxr-xr-x 1 1.1K 2010-09-07 14:04 libprotoc.la
lrwxrwxrwx 1 18 2010-09-07 14:04 libprotoc.so -> libprotoc.so.6.0.0
lrwxrwxrwx 1 18 2010-09-07 14:04 libprotoc.so.6 -> libprotoc.so.6.0.0
-rwxr-xr-x 1 1.3M 2010-09-07 14:04 libprotoc.so.6.0.0
drwxr-xr-x 2 4.0K 2010-09-07 14:03 pkgconfig
Các Câu hỏi
tôi đã không thay đổi việc xây dựng kịch bản để thực hiện một "--gc-sections
" trong liên kết, do đó shouldn' t xây dựng unbloat là như nhau nếu không lớn hơn? Điều gì làm giảm kích thước?
nền
Tôi đang soạn thảo một thư viện ở mức độ thấp với gcc vào lúc này và thư viện là một 2.5MB ginormous unstriped và 970KB tước. Điều này là không thể chấp nhận được, và tôi cần phải loại bỏ mã chết - tôi phụ thuộc vào OpenSSL, Protocol Buffers và 3 Libraries từ Boost, và tôi sẽ liên kết tĩnh 2 cuối cùng vào thư viện của tôi. Hai thư viện liên kết tĩnh sẽ phải được biên dịch chúng với các phần "-ffunction-sections -fdata-section" để loại bỏ mã chết.
liên quan Câu hỏi
My next question là về làm thế nào để xác định nguồn gốc sử dụng để loại bỏ mã chết.
phải xóa bài đăng cũ vì tôi có một bài đăng đôi vì một lý do nào đó. Có 2,5 MB là ginormous - Tôi đã viết thư viện tương tự và có thể nhận được chúng xuống đến 80-300kb (sử dụng MSVC). Chuỗi công cụ GCC sẽ có thể thực hiện tương tự. –
@Hassan Syed, tôi nghĩ rằng phần nền của bạn gây ra nhiều vấn đề hơn là giải quyết. Nó không liên quan đến câu hỏi, và nó làm cho nó âm thanh như bạn đang yêu cầu các cách để giảm kích thước tập tin của một nhị phân. Tôi sẽ loại bỏ nó, hoặc đặt nó ở phần cuối của câu hỏi. – strager
Kích thước không bị xói mòn không được tính. Vì điều đó chứa tất cả các nội dung bổ sung mà bạn muốn xóa và không thực sự liên quan đến sản xuất. –