Przeszliśmy przez punkty wymienione na MSDN WRT do tego błędu (z wyjątkiem # 5). Trzy różne osoby na różnych maszynach mają ten sam problem. WPB jest tworzony, ale kończy się gdzieś pośrodku.LNK1201 Visual C++ 2010 Duży projekt nie generuje PDB
Szczegóły:
- 67 statycznych bibliotek
- 4.27 GB bibliotek statycznych
- 1048575 bajtów - Rozmiar WPB kiedy linker nie
- Ostatnie kilka megabajtów WPB są nieważne (zera)
- Wydanie kompilacji powiedzie się & tworzy PDB (włączamy go bez informacji o debugowaniu w exe)
- Release build PDB ma nieco mniej niż 1 GB.
Mamy wyłączone skanery antywirusowe. Oglądane z procmon.exe i nie widziałem żadnych podejrzeń interakcji z PDB, gdy linker zawiódł.
Related question sugeruje ~ 1 GB limitu na PDB - ktoś/sposób potwierdzenia?
UPDATE & ROZWIĄZANIE:
@Barry i zespół chrom wymyślić rozwiązania. Here to łata do systemu kompilacji Chromium, która implementuje rozdzielczość.
Szczegóły
PDB wykorzystuje wirtualny system plików wewnętrznie: MSF. Kiedy linker tworzy plik PDB, domyślnie jest to (najwyraźniej nie konfigurowalny) rozmiar strony 2 kB. Najwyraźniej & na szczęście, gdy kompilator tworzy swój PDB, domyślnie rozmiar strony wynosi 4 kB. To PDB kompilatora może być podniesione i użyte jako baza dla PDB łącznika.
lepszym rozwiązaniem Jako Pre-Link Event nad projektem, który jest łączącego swój exe lub dll możemy podnosić kompilator do generowania naszą wymaganą początkową PDB:
cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb"
oryginalne rozwiązanie
Utwórz projekt biblioteki statycznej C++ z pustym plikiem cpp, skonfiguruj "Nazwę pliku bazy danych programu Porgram", aby wyprowadzała coś innego niż domyślna. Użyj niektórych zdarzeń budowania projektu (użyłem "Zdarzenia Pre-Link"), aby skopiować wcześniej utworzony PDB do miejsca, w którym spodziewasz się linkera (patrz Linker-> Generuj plik bazy danych programu), aby utworzyć jego PDB. Na szczęście linker przyjmie skopiowany w PDB i wykorzysta jego rozmiar strony 4 kB. To da trochę czasu i trochę miejsca, pozwalając nawet na 2 GB PDB.
Inkrementalne kompilacje powodowały takie problemy. Czy dzieje się to podczas kompletnej przebudowy po czystym? –
Tak, dzieje się to podczas kompilacji i przebudowy. Uważam, że połączenie przyrostowe jest wyłączone, ale mamy podwójną kontrolę. – Zac