2012-12-06 8 views
13

Budując bibliotekę statyczną c, zauważyłem, że plik .a (plik tłuszczu z symulatora i iPhone'a) jest dość duży. W szczególności pierwotnie było to 5,7 MB. Znalazłem this post i ustawiłem moje ustawienia kompilacji Generate Debug Symbols na Nie, zmniejszając rozmiar biblioteki do 1.7mb.Jakie są najlepsze praktyki, aby zmniejszyć rozmiar bibliotek statycznych w celu-c?

To była duża poprawa, ale czy jest coś jeszcze, co można zrobić? Same pliki implementacyjne i pliki nagłówkowe zajmują ~ 100kb.

Odpowiedz

16

Jeśli jest to część Twojej troski, biblioteka statyczna to tylko odpowiednie pliki .o zarchiwizowane razem oraz część księgowa. Tak więc statyczna biblioteka o pojemności 1,7 mb - nawet jeśli kod w niej znajduje się w całości 1,7 MB - zazwyczaj nie doda 1,7 miliona do twojego produktu. Obowiązują zwykłe zasady dotyczące usuwania kodów martwego kodu.

Poza tym można zmniejszyć wbudowany rozmiar kodu. Poniższe prawdopodobnie nie jest wyczerpującą listą.

W ustawieniach budowania celu wybierz "Poziom optymalizacji". Przełączając to na "Najszybszy, Najmniejszy -O", pozwolisz kompilatorowi poświęcić trochę prędkości na rozmiar.

Upewnij się, że budujesz dla kciuka, tym bardziej kompaktowy kod ARM. Zakładając, że korzystasz z LLVM, oznacza to, że nie musisz mieć -mno-thumb w dowolnym miejscu ustawień projektu.

Należy również rozważyć, dla których architektur chcesz zbudować. Apple nie zezwala na przesyłanie aplikacji obsługującej zarówno ARMv6, jak i iPhone'a 5 i całkowicie zrzuciło obsługę ARMv6 z najnowszego Xcode. Więc prawdopodobnie nie ma sensu, w tym w tym momencie.

+0

+1 za wskazanie, że rozmiar biblioteki librarskiej nie doda dokładnie do rozmiaru binarnego, ponieważ linker zwykle optymalizuje duży czas. – Till

+0

Dzięki, @Tommy. To czyści wiele rzeczy – johngraham

+0

@Tommy Co się stało, jeśli użytkownik określił -all_load lub -force_load? – klefevre

Powiązane problemy