38 Kb Source -> 400 Kb Binary



  • Hi!

    Mein gcc schafft es auf 38 Kb C++-Source ne' 400 Kb Binary zu basteln.
    Dabei linke ich alle Libs dynamisch dazu.

    Ich benutze KDev. mit folgenden configure Params:
    --build=i386-linux --host=i386-linux --target=i386-linux --disable-debug --enable-final

    Wie kriege ich meine Binary kleiner?

    Hier ist die Liste der Libs die dazu linke:
    libIL.so.1 => /usr/local/lib/libIL.so.1 (0x40012000)
    libpng12.so.0 => /usr/lib/libpng12.so.0 (0x40114000)
    libtiff.so.3 => /usr/lib/libtiff.so.3 (0x40135000)
    libmng.so.1 => /usr/lib/libmng.so.1 (0x40178000)
    libz.so.1 => /lib/libz.so.1 (0x401ce000)
    libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x401db000)
    liblcms.so.1 => /usr/lib/liblcms.so.1 (0x401f8000)
    libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40212000)
    libm.so.6 => /lib/libm.so.6 (0x402be000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x402df000)
    libc.so.6 => /lib/libc.so.6 (0x402e7000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    Außerdem linke ich noch den Xvid-Codec. Der wird von ldd allerdings nicht
    angezeigt. Habe wohl vergessen ldconfig auszuführen. 🙄



  • info gcc

    Probier mal -Os



  • Ich habe O2 drin!



  • zeig am besten mal den kompletten Compiler/Linker aufruf



  • man strip



  • Strip, danach upx



  • g++ -DHAVE_CONFIG_H -I. -I. -I.. -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -DNDEBUG -DNO_DEBUG -O2 -O3 -Wall -fno-exceptions -fno-check-new -fexceptions -MT xvid.all_cpp.o -MD -MP -MF

    g++ -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -DNDEBUG -DNO_DEBUG -O2 -O3 -Wall -fno-exceptions -fno-check-new -fexceptions -s -o xvid xvid.all_cpp.o -lxvidcore /usr/local/lib/libIL.so -lpng -ltiff /usr/lib/libmng.so -L/usr/lib -lz -lm /usr/lib/libjpeg.so -llcms -Wl,--rpath -Wl,/usr/local/lib -Wl,--rpath -Wl,/usr/local/lib

    Das lustig ist, das die .o Datei noch schön klein ist. Muß also
    am Linker liegen.


Anmelden zum Antworten