Странность
Я скомпилировал буферы протокола Google, не используя никаких дополнительных параметров для компиляции «раздувания», и скомпилировал следующую команду ./configure CXXFLAGS="-ffunction-sections -fdata-sections"
. ду-ч показывает:
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 .
Drill 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
Вопрос
Я не изменял сценарии сборки для выполнения «--gc-sections
» во время компоновки, поэтому не должна ли сборка unbloat быть такой же, если не больше? Что вызвало уменьшение в размере?
Фон
В данный момент я компилирую низкоуровневую библиотеку с помощью gcc, и библиотека имеет огромные 2,5 МБ свободного пространства и 970 КБ разделенного. Это неприемлемо, и мне нужно удалить мертвый код - я зависю от OpenSSL, буферов протокола и 3 библиотек из Boost, и я буду статически связывать последние 2 в мою библиотеку. Две статически связанные библиотеки должны быть скомпилированы с помощью "-ffunction-section -fdata-section", чтобы я мог удалить мертвый код.
Смежный вопрос
Мой следующий вопрос о том, как указать корень, используемый для устранения мертвого кода.