Miért, a linker vizsgálja a C object fileok egymás közötti függését? Ha az egyik object fileban van 500 belépési pont exportálva meg 800 szimbólum, de abból nem használsz, csak ötöt, akkor mi lesz linkelve?
1., Vizsgálja. Egy statikus .a fájlból, ami több objektumot tartalmaz, csak azokat húzza be a végleges binárisba, amelyek szükségesek, nem a teljes .a fájlt. Ilyen értelemben végez valamilyen függőségkezelést. De ezt kb. meg is említem a postban.
2., Named sections (és bekapcsolt section gc) esetén csak azokat a szekciókat amik a végleges binárisba kerülnek, de mivel named section nélkül az assembler csak egy kód, adat és bss szekciót gyárt objektumonként ezért az egész objektumot. Erről szól a post. :D
Szerk: Oké, úgy tűnik ez is platformfüggő, objektum formátum függő, vagy nemtom, vagy GCC generáció függő, mert most megpróbáltam ARM GCC 5.2-vel, ami külön szekcióba rakja a függvényeket alapból is... Well, whatever. Lehet csak nekem van túl sok túl régi GCC felrakva... :) Viszont a --gc-sections linker paraméter továbbra is kell úgy tűnik, másként minden ami az objektumban van, a binárisban végzi. De lehet hogy ezt is hozzáfűzi a GCC manapság alapból.
Szerk #2: GCC 4.6.2-vel x86_64-en (Ubuntu 12.04LTS) még továbbra is kell az -ffunction-sections:
charlie@scenergy:~/lnk$ gcc -c -ffunction-sections --save-temps -o test.o test.c
charlie@scenergy:~/lnk$ cp test.s test.f.s
charlie@scenergy:~/lnk$ gcc -c --save-temps -o test.o test.c
charlie@scenergy:~/lnk$ diff test.s test.f.s
8c8
< .text
---
> .section .text.x,"ax",@progbits
24a25
> .section .text.y,"ax",@progbits
Szóval ha a named sections lett a default, akkor az GCC-ben is viszonylag friss változás.
A C++ object fileok is ugyanolyan ELF objectek, mint a C ELF object fileok, csak a name mangling éppen fordítófüggő.
Tudom, de az assemblert és a linkert nem nagyon érdekli a szimbólumaid name manglingje, ő az objektumban lévő szekciókra kíváncsi.
-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-