Muszę poważnie zoptymalizować rozmiar mojego pliku wykonywalnego ( ARM
programowanie) i zauważyłem, że w moim obecnym schemacie kompilacji ( gcc
+ ld
) nieużywane symbole nie są usuwane.
Użycie arm-strip --strip-unneeded
dla wynikowych plików wykonywalnych / bibliotek nie zmienia rozmiaru wyjściowego pliku wykonywalnego (nie mam pojęcia dlaczego, może po prostu nie może) .
Jaki byłby sposób (jeśli istnieje) zmodyfikowania potoku budowania, tak aby nieużywane symbole zostały usunięte z pliku wynikowego?
Ja nawet nie myśleć o tym, ale mój obecny osadzony środowisko nie jest bardzo „mocny” i oszczędność nawet 500K
z 2M
wynikami w bardzo ładnym wzrost wydajności załadunku.
Aktualizacja:
Niestety obecna gcc
wersja, której używam, nie ma takiej -dead-strip
opcji, a -ffunction-sections... + --gc-sections
for ld
nie daje żadnej znaczącej różnicy w wynikowym wyniku.
Jestem zszokowany, że stało się to nawet problemem, ponieważ byłem pewien, że gcc + ld
powinno to automatycznie usunąć nieużywane symbole (dlaczego w ogóle muszą je zachować?).
boost
bibliotek, .exe
plik wynikowy zawiera wiele nieużywanych plików obiektowych i ze względu na specyfikacje mojego obecnego osadzonego środowiska wykonawczego uruchomienie 10mb
aplikacji trwa znacznie dłużej niż na przykład uruchomienie 500k
aplikacji.