Autor Wątek: Gigantyczna waga OgreMain.dll  (Przeczytany 3936 razy)

Offline An0nym8us

  • Użytkownik

# Lipiec 25, 2014, 20:55:00
Witam,

Postanowiłem, że napiszę to w osobnym wątku, tamten jest zbyt zaśmiecony wieloma problemami.

Krótko, zwięźle i na temat: zbuildowane przeze mnie biblioteki OGRE Sdk są zbyt duże, zwłaszcza dla dystrybucji. OgreMain_d.dll ma 160MB, a OgreMain.dll ma 220MB (a z tego co mi się wydaje to OgreMain_d.dll powinno być większe, znacznie większe od OgreMain.dll). Wg. nic w CMake nie zmieniałem, tzn. zamiast Release mam zbuildowane Relwithdebinfo, ale z tego co wyczytałem na innym forum OgreMain pod tym trybem powinno być i tak małe.

Tak czy siak testowo próbuję zbuildować OGRE SDK pod Release, ale ktoś miał podobny problem i mu to nic nie dało. Jak można to naprawić? Pozdrawiam.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline JasonVoorhees

  • Użytkownik
    • FotoGry

# Lipiec 25, 2014, 21:03:45

Offline An0nym8us

  • Użytkownik

# Lipiec 25, 2014, 21:06:51
Szukając pomocy dot. tego problemu natknąłem się na ten program kątem oka, i teraz moje pytanie: czy naturalne jest to że u mnie biblioteki Release są tak duże, i jakie minusy daje używanie UPX?

EDIT: Skompresowałem OgreMain.dll z pomocą upx (bez brute, teraz je testuję) i rozmiar biblioteki spadł do 40MB. Jest to dla mnie dziwne, przynajmnie zastanawia mnie jakim cudem w SampleBrowser OgreMain.dll waży zaledwie 8MB :/.

EDIT2: Tak sobie myślałem, czy nie powinno być gdzieś opcji rekompilowania bibliotek tylko z funkcjami używanymi przez daną aplikację?
« Ostatnia zmiana: Lipiec 25, 2014, 21:15:40 wysłana przez An0nym8us »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 25, 2014, 21:15:33
Cytuj
jakie minusy daje używanie UPX?
Przykładowo zacznie Cię blokować połowa antywirusów. ;)

Offline An0nym8us

  • Użytkownik

# Lipiec 25, 2014, 21:20:24
upx --brute OgreMain.dll

Stopień kompresji/ratio - 17% a jeszcze nie doszło do ćwiartki :/. Czy coś za przeproszeniem spieprzyłem buldując OGRE SDK że OgreMain.dll jest takie "bycze"?

Offline Karol

  • Użytkownik

# Lipiec 25, 2014, 21:33:06
Lazarusowe (FPC) exeki mają rozmiar koło 20MB na dzień dobry z gołym okienkiem. Tam kompilator dorzuca bogate info debugowe i inne różne pierdoły. Już nie pamiętam co się w ustawieniach zmieniało, żeby zbić rozmiar do sensownego 1MB, ale się dało i to bez UPX'a.

Offline Xirdus

  • Redaktor

# Lipiec 25, 2014, 21:38:05
Możesz jeszcze spróbować przejechać DLL-kę stripem.

Offline An0nym8us

  • Użytkownik

# Lipiec 25, 2014, 21:45:47
O, wielkie dzięki Xirdus ;). Praktycznie od razu zmniejszyło OgreMain.dll z 220MB do zaledwie 7MB. I w dodatku działa, czego w moim wykonaniu bym się nie spodziewał.

W każdym bądź razie problem rozwiązany, tylko na jedno pytanie nie dostałem odpowiedzi: Czy to normalne że OgreMain.dll Release jest takie duże? Ot ciekawski jestem, dlatego chciałbym uzyskać odpowiedź :).



I jeszcze jedno: co robi strip, że tak "drastycznie" zmniejsza rozmiar biblioteki a zachowuje on swoje działanie?

Offline JasonVoorhees

  • Użytkownik
    • FotoGry

# Lipiec 25, 2014, 21:56:13
Nie no, tak dla żartu zapodałem UPX, a wiadomo, że on nie trafia w sedno problemu :) (przynajmniej ja nie chciałbym w swoich release'ach dodawać czegoś skompresowanego UPX'em).

Zobacz ten temat: http://www.ogre3d.org/forums/viewtopic.php?f=2&t=76046

Wychodzi na to, że to normalne... W prekompilowanym SDK, również waga OgreMain jest gigantyczna.

Facet nawet pobił Twój rekord wielkości pliku OgreMain ;)

Co ciekawe, libOgreMain.so.1.8.1 pod Linuksem zajmuje niecałe 5MB. W czym to kompilujesz? MinGW, czy Visual Studio?
« Ostatnia zmiana: Lipiec 25, 2014, 22:07:23 wysłana przez JasonVoorhees »

Offline Xirdus

  • Redaktor

# Lipiec 25, 2014, 22:32:14
W każdym bądź razie problem rozwiązany, tylko na jedno pytanie nie dostałem odpowiedzi: Czy to normalne że OgreMain.dll Release jest takie duże? Ot ciekawski jestem, dlatego chciałbym uzyskać odpowiedź :).
Jak strip pomógł, to znaczy że miałeś od zarąbania symboli debugowych. Relwithdebinfo może ważyć więcej niż Debug bo może być bardziej skomplikowane dopasować symbole do skompilowanego kodu, i przez to potrzebne więcej informacji - ale to tylko takie moje domysły i nie bierz ich zbyt serio.

Offline Super Vegeta

  • Użytkownik
    • SV Games

# Lipiec 25, 2014, 23:17:51
Zapewne kompilator wrzucił Ci mnóstwo informacji debugowych. @Karol wspomniał o FPC, tam dla przykładu masz opcje:
-gl dla załączenia line info - do każdej instrukcji dołączone info o pliku źródłowym + numerze linii
-Xs dla automatycznego stripa
-CX oraz -XX by przy kompilacji wyrzucić wszystko, co nie będzie używane w ostatecznym EXE/ELF.

Do debugowania buduję sobie wersje -gl, natomiast releasy kompiluję z -CX -XX -Xs. Różnica zależy od wielkości programu, ale np. dla awful wersja release waży 1/3 tego, co debug - a jest to program czysto konsolowy i raptem 10k linii.
Przy apkach z Lazarusa dochodzi całe mnóstwo kodu dorzucanego automagicznie do obsługi okienek, tam nie jest rzadkością kilkudziesięciokrotne zmniejszenie wagi po wywaleniu wszystkich symboli.

Offline An0nym8us

  • Użytkownik

# Lipiec 26, 2014, 00:12:56
Do buildowania, ogólnie jako kompilator C++ używam Mingw (cały, najnowsza wersja z wszystkimi tymi bajerami - się trochę naklikałem w mingw-get).

Trochę myślałem nad Visual Studio, ale taka prawda że nie wiem czy przypadkiem nie będę się przesiadał na któregoś z Linuxa a tam VS nie działa - po prostu nie chcę się przyzwyczajać.

W każdym bądź razie jutro sprawdzę Visual Studio i Lazarusa.

Tak co do Lazarusa/FPC - to nie jest przypadkiem kompilator Pascala?

Offline Karol

  • Użytkownik

# Lipiec 26, 2014, 01:17:22
Tak co do Lazarusa/FPC - to nie jest przypadkiem kompilator Pascala?
Tak, FPC oznacza Free Pascal Compiler, ale sklejanie exeków i to co zawierają jest raczej niezależne od języka kodu źródłowego, prawda? A podałem to jako przykład gdzie exeki są dość spore i jest to kwestia flag kompilatora, analogicznie więc może być i tu (i było z tego co widzę).

Offline An0nym8us

  • Użytkownik

# Lipiec 26, 2014, 02:12:35
Tak, FPC oznacza Free Pascal Compiler, ale sklejanie exeków i to co zawierają jest raczej niezależne od języka kodu źródłowego, prawda? A podałem to jako przykład gdzie exeki są dość spore i jest to kwestia flag kompilatora, analogicznie więc może być i tu (i było z tego co widzę).

Teraz jak na to patrzeć to tak :).  Z góry przepraszam za moją... "bezmyślność"? Przesiedziałem dość sporo czasu w C#, nigdy nie miałem takich problemów czy potrzeb,

Takie pytanie małe, jak już skoro w temacie jesteśmy: dokładam do opcji kompilatora i linkera (Project -> Build Options -> Compiler Settings -> Other options i Project -> Build Options -> Linker Settings -> Other options) te oto opcje (Korzystam z C::B, MinGW):
-static-libgcc
-static-libstdc++

Po takim zabiegu program powinien zwiększyć swój rozmiar i owszem, robi to. Z 86KB powstaje program o wadze 660KB, ale i tak po uruchomieniu wywala mi błąd o braku libgcc_s_dw2-1.dll i libstdc++-6.dll

Próbowałem to jakoś naprawić, niby pomaga użycie samego -static, ale wtedy kompilator/linker żąda statycznych bibliotek podczas gdy ja OGRE SDK skompilowałem z myślą o dynamicznych bibliotekach (skutkiem czego ich nie wykrywa).





Tak już mniej off-top, bardziej informacyjnie: zbuildowałem OGRE SDK pod Release, i tutaj OgreMain.dll waży zaledwie 13MB. Ale jest dobrze tak jak jest, nie będę zmieniał tego Relwithdebinfo.
« Ostatnia zmiana: Lipiec 26, 2014, 02:21:01 wysłana przez An0nym8us »

Offline JasonVoorhees

  • Użytkownik
    • FotoGry

# Lipiec 26, 2014, 03:49:13
Z góry przepraszam za moją... "bezmyślność"? Przesiedziałem dość sporo czasu w C#, nigdy nie miałem takich problemów czy potrzeb,
Wiesz ile waży .NET Framework :D ? Lazarus przynajmniej generuje binarki bez dodatkowych zależności. Coś za coś :)