В чем разница между файлами .ilk и .iobj? - PullRequest
0 голосов
/ 27 июня 2018

Я заметил, что Visual Studio генерирует файлы * .ilk для отладочных сборок и файлы * .iobj для сборок релизов. Как я понимаю, оба этих типа файлов используются в качестве входных данных для инкрементного компоновщика. В чем разница между ними? Могут ли они использоваться вместе? Как я могу отключить эти файлы в настройках проекта?

1 Ответ

0 голосов
/ 27 июня 2018

Согласно этому ответу , файлы .iobj создаются для поддержки пошаговой генерации кода времени ссылки (иначе LTCG, и то, что раньше называлось, я полагаю, всей программой) оптимизация »), и LTCG обычно включается только для сборок релиза.

Одна оптимизация, которую может выполнить LTCG, - встроить функцию из другого модуля компиляции (то есть исходного файла). Компилятор (конечно) не может этого сделать. Нет сомнений в других.

Файлы

.ilk, с другой стороны, поддерживают добавочное связывание для отладочных сборок, чтобы получить быстрое время ссылки. Это не то же самое, что инкрементная LTCG, где компоновщик пытается использовать оптимизации кросс-компиляции, которые он делал ранее, опять же, чтобы ускорить процесс, но другим способом.

Из этого следует, что для подавления генерации файлов .iobj отключите «генерацию временного кода инкрементной ссылки» для вашего проекта, а для подавления генерации файлов .ilk отключите «инкрементную компоновку». Я считаю, что оба из этих вариантов компоновщика. Но зачем? - они ускоряют развитие. Вместо этого я удаляю эти файлы при архивировании [версии] моего проекта.

Инкрементные ссылки обычно отключаются для релизных сборок, хотя я не уверен, почему. Возможно, эти два варианта несовместимы, я никогда не пытался включить их оба одновременно. Или, может быть, MS подумала, что нам надоело, что они загромождают наши жесткие диски продуктами для сборки, кто знает?

...