Огромные 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 соответственно.
Ответы
Ответ 1
Проверьте параметры отладки. /Z7
вызывает большие .OBJ файлы, /Zi
помещает одну и ту же информацию в отдельный .PDB файл.
Опция компилятора /Oi
может помочь, введя внутреннюю функцию, которая больше не должна связываться. Вероятно, вы не хотите отлаживать memset
.
Отключите /Gm
(инкрементная перестройка), чтобы включить /MP
(параллельная сборка). Также отключите /Gy
- в то время как он делает для меньших EXE, он вызывает большие файлы OBJ и более медленную привязку.