Подтвердить что ты не робот

Огромные OBJ файлы в VS2008 компиляции С++ по сравнению с VS6

У нас есть большой проект, > 1M строк кода примерно в 300 DLL. До сих пор мы использовали VS6.

Теперь я преобразовал все в VS2008, все компиляции, ссылки и, что еще важнее - работает!

== > Однако... результирующие скомпилированные файлы OBJ больше X 10, а связь очень медленная, при этом компоновщик часто ударяет > 1 ГБ памяти.

Часть последствий заключается в том, что мне нужно скомпилировать определенные prject с /bigobj.

Результат - это сборка, которая прошла примерно с 1:45 на рабочем столе до 3 часов. DLL и LIB примерно такого же размера, как и в старой сборке VS6.

Я прочитал все, что мог найти здесь, но не нашел средства для решения этой проблемы. Если это дополнительная информация DEBUG - я не хочу этого. Раньше у меня было достаточно. Размер в выпуске увеличился, но не так много...

У кого-нибудь есть идея? Или мой единственный вариант разбить проекты на гораздо меньшие единицы? Является ли рефакторинг моей единственной надеждой?! Наверняка есть секретный флаг, который я пропустил...


Edit1 (13/07/2012 12: 20BST) Я сравнил dumpbin Obj, созданный VS6 vs. VS2008. Тот, который в 2008 году выглядит как "статическая привязка". В VS6 он содержит несколько символов из текущей DLL. В VS2008 он содержит символы из (возможно) всех библиотек, от которых он зависит. Размеры Dumpbin составляют 66kb и 32,000kb для VS6 и VS2008 соответственно.
4b9b3361

Ответ 1

Проверьте параметры отладки. /Z7 вызывает большие .OBJ файлы, /Zi помещает одну и ту же информацию в отдельный .PDB файл.

Опция компилятора /Oi может помочь, введя внутреннюю функцию, которая больше не должна связываться. Вероятно, вы не хотите отлаживать memset.

Отключите /Gm (инкрементная перестройка), чтобы включить /MP (параллельная сборка). Также отключите /Gy - в то время как он делает для меньших EXE, он вызывает большие файлы OBJ и более медленную привязку.