• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kompresja pliku exe po kompilacji w Visual Studio 2017

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
846 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez Mivvat Początkujący (250 p.)
Plik exe po kompilacji w visualu waży jakieś 77KB, a po codeblocksie 1620KB, czego to wina? Dodam, że po wysłaniu tego mniejszego pliku znajomemu wyskoczyło mu kilka errorów z brakiem .dll. Kompilator Visual Studio nie kompiluje bibliotek? Jak to zmienić?

2 odpowiedzi

0 głosów
odpowiedź 27 stycznia 2019 przez mokrowski Mędrzec (156,260 p.)
wybrane 27 stycznia 2019 przez Mivvat
 
Najlepsza

W ramach narzędzi Windows Driver Development Kit, masz program dependencywalker. Na witrynie macierzystej programu, niestety są wersje starsze. Program pozwoli zaprezentować Ci z jakich bibliotek .dll dany .exe korzysta.

https://developer.microsoft.com/en-us/windows/hardware

http://www.dependencywalker.com/

Jeśli chcesz zmniejszyć objętość dystrybuowanych programów, dobrym wyborem będzie kompilacja z bibliotekami współdzielonymi. Niestety jest wtedy ryzyko braku bibliotek współdzielonych w systemie docelowym. Jeśli masz wzór takiego systemu (ja polecam pracę z obrazami maszyn wirtualnych), w przypadku braku biblioteki .dll, kopiujesz ją do katalogu programu. Wtedy uruchamiany program ją "zobaczy".

Spora objętość Twoich programów może wynikać z:

  1. Braku optymalizacji redukującej objętość programu (dla gcc przełącznik -Os (minus Ooo Ess), dla MSVC /Os) https://docs.microsoft.com/en-us/cpp/build/reference/o-options-optimize-code?view=vs-2017
  2. Źle wybranych opcji kompilacji - biblioteka statyczna powoduje zwiększenie objętości programu.
  3. Braku opcji wbudowania symboli dla linkera (dla gcc to -fdata-sections -ffunction-sections i na etapie konsolidacji -Wl,-gc-sections ) ... ewentualnie użycie likowania lto .. przystępne tłumaczenie: https://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html
  4. Rozwlekłych struktur danych które masz w swoim programie... no tu już źródła by pomogły.

Ogólnie przy domyślnych opcjach kompilacji programy w gcc (a więc podstawowym kompilatorze dostarczanym z C::B), mają większą objętość niż z MSVC. Wynika to także z konieczności wczytywania bibliotek zapewniających warstwę kompatybilności (np. dla wersji z Cygwin...).

PS. Po wykonaniu operacji na poziomie kompilatora, masz jeszcze możliwość wykonania kompresji programu do wykonania specjalizowanymi narzędziami. Np. UPX: https://upx.github.io/

0 głosów
odpowiedź 27 stycznia 2019 przez criss Mędrzec (172,590 p.)

Plik exe po kompilacji w visualu waży jakieś 77KB, a po codeblocksie 1620KB, czego to wina?

To dwa różne kompilatory, różne opcje kompilacji, wszystko różne. Chociaż fakt faktem, też zauważyłem że msvc ma skłonności do generowania dużej ilości kodu w stosunku do chociażby gcc

Kompilator Visual Studio nie kompiluje bibliotek? Jak to zmienić?

 W opcjach kompilacji/projektu. Zmień linkowanie biblioteki runtime na statyczne.

Podobne pytania

0 głosów
0 odpowiedzi 1,991 wizyt
+1 głos
1 odpowiedź 1,947 wizyt
pytanie zadane 2 sierpnia 2019 w C# przez fourfeeter Początkujący (340 p.)
0 głosów
1 odpowiedź 971 wizyt

93,103 zapytań

142,079 odpowiedzi

321,591 komentarzy

62,445 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...