Ключи компиляции gcc для минимизации размера программ (gcc optimization size compile)
Ключевые слова: gcc, optimization, size, compile, (найти похожие документы)
Date: Sun, 04 Aug 2002 20:01:46 +0600
From: Eugene Grosbein <[email protected]>
Newsgroups: fido7.ru.unix.prog
Subject: Ключи компиляции gcc для минимизации размера программ
AB> С какой опцией пользовать gcc, чтобы бинари получались меньше 4K?
AB> я так понимаю это он их дебуг-инфой набивает?
Hапример, так:
# cat hello.c
#define MESG "Hello, world!\n"
#define MESG_SZ sizeof(MESG)-1
main() {
write(1,MESG,MESG_SZ);
_exit(0);
}
# gcc -nostartfiles -nodefaultlibs -nostdlib -fomit-frame-pointer -static -s \
-O99 -o hello hello.c -lc
Hа FreeBSD 4.6-STABLE будет 3624 байта.
AB> натравливал на бинари strip... размер на ~2k меньше становится... только вот
AB> бинарь типа "helloworld"... и если линковать его ld -o binar binar.o, то выходит
AB> около 500 байт...
Если охота поиграться, посмотри это вариант:
# cat hello2.c
#define MESG "Hello, world!\n"
#define MESG_SZ sizeof(MESG)-1
int errno;
main() {
write(1,MESG,MESG_SZ);
_exit(0);
}
# OBJS=/usr/obj/usr/src/lib/libc/ \
gcc -nostartfiles -nodefaultlibs -nostdlib -s -static -O99 \
-Wl,--entry=main,--gc-section -o hello2 hello2.c \
$OBJS/write.o $OBJS/_exit.o $OBJS/cerror.o \
$OBJS/__error.o
Этот вариант даст 604 байта. Для законченных извращенцев есть и третий:
# cat hello3.c
#define MESG "Hello, world!\n"
#define MESG_SZ sizeof(MESG)-1
#define write(a,b,c) syscall(4,a,b,c)
#define _exit(a) syscall(1,a)
int errno;
main() {
write(1,MESG,MESG_SZ);
_exit(0);
}
# SRCS=/usr/src/lib/libc
gcc -I$SRCS/i386 -nostartfiles -nodefaultlibs -nostdlib -s \
-static -O99 -fomit-frame-pointer -Wl,--entry=main,--gc-section \
-o hello3 hello3.c $SRCS/i386/sys/syscall.S \
$SRCS/i386/sys/cerror.S $SRCS/sys/__error.c
Это будет 508 байт. Удовлетворен? :-)
1, Sergey (??), 13:20, 21/01/2007 [ответить]
| +/– |
а можно ети все флаги (для 3его варианта) добавить в мейк.конф? и как это правильно сделать? | |
|