2010-01-12 8 views
6

Mam projekt biblioteki statycznej ze standardowymi opcjami kompilacji debugowania/wydania. Zaintrygowało mnie, że podczas gdy debugowanie .lib jest dość dużym rozmiarem 22Mb, wydanie to ogromna 100Mb. I to nie jest masywna baza kodu, około 75 klas i żadna z nich nie jest bardzo gigantyczna.Wersja LIB jest ogromna w porównaniu do debugowania

Moje pytanie brzmi, czy to normalne i czy powinienem się przejmować?

+0

Pytasz o projekt statycznej biblioteki, prawda? –

+0

tak, przepraszam. edytowane w celu wyjaśnienia. –

+0

Mam teraz ten problem. Czy znalazłeś przyczynę? –

Odpowiedz

1

Idealnie zwolnij lib powinien być mniejszy niż debugowanie.

Chyba można statycznie łączenie innych bibliotekami, takie jak MFC, ATL etc ...

sprawdzić ustawienie debugowania zwolnieniu i.

użyć #pragma once, aby uniknąć wielokrotnego dołączania plików.

0

Chciałbym zwykle oczekiwać odwrotnie ...

Czy to możliwe, że istnieją duże połacie kodu zawartego wewnątrz preprocesor tylko bloki, które zostały włączone w uwolnienie buduje?

Kod szablonu jest w tym przypadku szczególnie podejrzany.

Aktualizacja

myślę, że problem jest najprawdopodobniej spowodowane linkami do bibliotekami statycznych w trybie zwolnienia, a wspólne bibliotekami w trybie debugowania ...

+1 karoberts

+0

Kod szablonu jest rozwijany inline w kompilacjach Debug, podobnie jak w wersji Release, więc to nie jest problem. –

+0

Uzgodniono, chyba że jest to #if RELEASE lub podobny przypadek. –

+0

Nie sądzę; kompilator/optymalizacja wydania może spasować kod szablonu do niczego. To ogromna różnica w wielkości. –

1

Nie , to jest nienormalne. Powinno być odwrotnie. Tak, powinieneś się tym przejmować.

Zacznę od ponownego sprawdzenia rozmiarów, aby upewnić się, że nie przetłumaczyłem rozmiarów wersji i debugowania.

Następnie spójrz na biblioteki, z którymi łączysz się w celu wydania i debugowania. Czy przypadkowo połączyłeś bibliotekę debugowania z wysyłką i wysłałeś bibliotekę do debugowania?

Przyjrzyj się dokładnie swoim ustawieniom dotyczącym wydania i debugowania. Coś bardzo podejrzanego dzieje się.

1

Czy jest możliwe, że ogromna ilość tego kodu jest wbudowana, a wersja debugowania nie jest "inlining"?

4

Sprawdziłbym, czy statycznie łączysz biblioteki w trybie zwolnienia i dynamicznie łączę je w trybie debugowania. Możesz na przykład statycznie łączyć środowisko wykonawcze C++.

+0

+1: Byłem tam. – Dathan

+0

Zakładając, że pyta o projekt biblioteki statycznej, biblioteka statyczna nie jest nigdy powiązana z niczym w projekcie. Powiązanie bibliotek statycznych występuje tylko wtedy, gdy używana jest biblioteka. –

+0

Prawidłowy Neil. Brak linków, tylko zewnętrzne #includes –

0

Jest jedna rzecz, która może wyjaśnić taki rozmiar: symbole debugowania osadzone w kompilacji wydania (w przeciwieństwie do budowanego jako pdb). Czy na pewno nie masz wygenerowanych symboli debugowania dla swojej wersji wydania? (którego wizualnego C++ używasz?)

+0

2008. Informacje na temat PDB/debugowania to obszar, który zamierzam przyjrzeć się bliżej ... Generalnie generuję PDB dla wydania i debugowania, ale powinien to być osobny plik. –

+0

ok. winowajcą może być/Z7 i/lub/Yd, jeśli używamy plików pch. Możesz podać wszystkie opcje, których używasz w linii poleceń. – Bahbar

3

Miałem ten sam problem. Poprawka jest bardzo prosta. Projekt nieruchomości/Configuration Properties/Ogólne/Cały program korzystanie Optymalizacja Nie Cały program optymalizacji zamiast Zastosowanie link Czas generowania kodu. Rozmiar mojej statycznej biblioteki zmniejszył się z 5 MB do 1.3MB

+0

Nie jestem pewien dlaczego, ale to był dla mnie powód. Nie powinno to być problemem, chyba że gdzieś będziesz instalował pliki .lib. Jeśli po prostu utrzymujesz je w swoim lokalnym rozwiązaniu, powinieneś być w porządku, ponieważ plik .exe lub .dll, który pobiera statyczną bibliotekę, wyeliminuje rzeczy, których nie potrzebuje. Moje pytanie: http://stackoverflow.com/questions/2472568/visual-c-9-0-2008-static-lib-boost-library-large-lib-file – CuppM

Powiązane problemy