det kan godt være at man BARE skal sætte linkeren og compileren til ikke at linke til nogle libraries, og kompile det som en flat binary. men jeg kan ikke finde noget sted i mine compilere hvor der står hvilke libraries den skal kompile
gcc:
Brug følgende parametre til din compiler:
-nostdlib -fno-builtin -fno-exceptions -nostartfiles -fnortti. Du skal også undlade at linke, og altså derfor bruge
-c.
Derefter skal du linke dine objektfiler. gcc kommer med ld, så du kan f.eks. bruge et linkerscript:
/* link.ld */
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
.text 0x100000 :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
_CTOR_LIST__ = .; LONG((_CTOR_END__ - _CTOR_LIST__) / 4 - 2) *(.ctors) LONG(0) _CTOR_END__ = .;
_DTOR_LIST__ = .; LONG((_DTOR_END__ - _DTOR_LIST__) / 4 - 2) *(.dtors) LONG(0) _DTOR_END__ = .;
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}
INPUT(code.o)
OUTPUT(program.bin)
Du skal naturligvis have den nødvendige kode i dine objektfiler -- navnligt constructorlister for globale objekter (det er ikke nemt at bruge C++ som standalone).
Linkeren kan bruges således:
ld -T link.ld, hvor
link.ld er navnet på linkerscriptet.
Hvis du stadigvæk er interesseret, så læs dokumentationen. Det er et utroligt komplekst emne.
--
I\\'m bloggin\\' it.
http://www.sigkill.dk/blog