Portál AbcLinuxu, 10. května 2025 00:21

Dotaz: různá velikost .so při kompilaci dohromady / po kusech?

30.3.2010 21:33 vencas | skóre: 32
různá velikost .so při kompilaci dohromady / po kusech?
Přečteno: 150×
Odpovědět | Admin
Zdravím,

kompiluju sdílenou knihovnu (plugin) z mnoha zdrojových souborů. Zkouším to 2 různými způsoby:
  1. každý zdroják se zkompiluje do objektu, všechny se pak dohromady slinkují. Protože je hodně kóu v hlavičkových souborech (c++, šablony atd), je to dost pomalé.
  2. Udělá se jeden zdroják, který #includuje všechny zdrojové soubory (které se v 1. případě kompilovaly zvlášť) a kompiluje se to všechno dohromady. g++ si ukousne 6GB RAM, ale je to o mnoho rychlejší než 1.
Nerozumím však tomu, proč se liší velikost výsledného pluginu - v prvním případě je několikanásobně větší (třeba 20MB vs. 120MB). Měl jsem za to, že linker by měl vyeliminovat symboly, které jsou definovány vícekrát (předpokládám že většinou instanciace šablon). Používám linker ld nebo gold (je to nastejno).

Umíte to někdo vysvětlit? Samozřejmě mě zajímá, jak případně zajistit, aby byl výsledek 1. menší.

Díky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.3.2010 22:08 chrono
Rozbalit Rozbalit vše Re: různá velikost .so při kompilaci dohromady / po kusech?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použil si strip (prípadne kompiloval tak, aby tam neboli debugovacie informácie)?

Inak nejaký rozdiel môže vzniknúť tým, že keď je to v jednom súbore, tak sa môžu použiť niektoré optimalizácie, ktoré sa nemôžu použiť, ak sa to kompiluje zvlášť (to ale neznamená, že to bude menšie, napr. kvôli tomu, že sa niektoré funkcie zmenia na inline, môže byť výsledný kód väčší).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.