la rarezaGCC Reducir binario Inflar - extraño efecto secundario
he recopilado protocolo de Google usando tampones no hay parámetros adicionales para un "hinchar" recopilar y compilar con el comando ./configure CXXFLAGS="-ffunction-sections -fdata-sections"
siguiente. una du-h revela:
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
La pregunta
no he alterado los scripts de creación para realizar una "--gc-sections
" durante la vinculación, por lo tanto, shouldn' t la construcción desbloqueada será igual si no más grande? ¿Qué causó la reducción en el tamaño?
Antecedentes
Estoy compilando una biblioteca de bajo nivel con gcc en el momento y la biblioteca es un 2,5 MB descomunal unstriped y 970KB despojado. Esto es inaceptable, y necesito eliminar el código muerto. Depende de OpenSSL, los Buffers de Protocolo y las 3 Bibliotecas de Boost, y enlazaré estáticamente los últimos 2 en mi biblioteca. Las dos bibliotecas vinculadas estáticamente deberán compilarse con "-ffunction-sections -fdata-sections" para que elimine el código muerto.
pregunta relacionada
Mi next question es acerca de cómo especificar la raíz se utiliza para eliminar el código muerto.
tuve que eliminar una publicación anterior porque tenía una publicación doble por algún motivo. Sí, 2,5 MB son geniales: he escrito bibliotecas similares y puedo bajarlas a 80-300kb (usando MSVC). La cadena de herramientas de GCC debería poder hacer lo mismo. –
@Hassan Syed, creo que su sección de antecedentes causa más problemas de los que resuelve. No se relaciona con la pregunta, y parece que estás pidiendo formas de reducir el tamaño del archivo de un archivo binario. Lo eliminaría o lo pondría al final de la pregunta. – strager
Bueno, el tamaño no eliminado no cuenta. Como eso contiene todo el material extra que deseas para eliminar errores y no es realmente relevante para la producción. –