Что вызывает предупреждение компоновщика "MSIL.netmodule или модуль, скомпилированный с /GL найден, перезапуск ссылки с /LTCG "?

Некоторые проекты в моем решении вызывают предупреждение этого компоновщика:

MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance

Я использую обновление Visual Studio 2013 3. Я еще не смог определить что-то особенное для тех проектов, которые могут вызвать это.

Что это за те проекты, которые производят это?


Я посмотрел на это: http://msdn.microsoft.com/en-us/library/k669k83h.aspx но я не знаю, что мы используем CLR, управляемый код, /LN или/NOASSEMBLY.

Ответы

Ответ 1

У меня была та же проблема, поэтому я сделал некоторые исследования.

Согласно https://msdn.microsoft.com/en-us/library/0zza0de8.aspx:

Если вы скомпилируете свою программу с помощью /GL и/c, вы должны использовать /LTCG linker для создания выходного файла.

Таким образом, сообщение может немного вводить в заблуждение - проблема не в MSIL .netmodule, а в модулях, скомпилированных с помощью /GL

При использовании /GL вы сообщаете компилятору о задержке генерации некоторого кода, а именно вокруг функции bounderies, чтобы оптимизировать их. LTCG поручить компоновщику генерировать (и оптимизировать) недостающий код. В противном случае программа не будет работать, как ожидалось.

В принципе, два переключателя должны использоваться вместе (при использовании). Они применяются к различным частям сборки: один для компиляции, а другой для ссылки.

Для полноты:

  • /GL управляется из свойств конфигурации > C/С++ > Оптимизация > Оптимизация всей программы

  • /LTCG управляется из свойств конфигурации > компоновщик > Оптимизация > Оптимизация всей программы

В более поздних версиях

  • /LTCG управляется с помощью свойств конфигурации > компоновщик > оптимизация > генерация кода временного кода канала/использование кода времени кода (/LTCG)

Ответ 2

Я столкнулся с такой же ошибкой и потратил немало времени, пытаясь ее исправить. Наконец, я понял, что он появился из-за использования опции "Оптимизация всей программы" в одной из моих библиотек зависимостей.

По умолчанию этот параметр установлен на "Да" во вновь созданных проектах. Когда я изменил его на "Нет" и перекомпилировал все зависимости, предупреждение исчезло. У меня чисто собственное решение на С++ без какого-либо управляемого кода.

Чтобы исправить, откройте настройки проекта для всех проектов зависимостей и проверьте настройку:

Свойства конфигурации > C/С++ > Оптимизация > Оптимизация всей программы

Убедитесь, что он установлен на "Нет".

Ответ 3

Я нахожу ту же самую ошибку, сообщая компоновщику о настройке /GL, которую вы использовали:

Установить...  Свойства конфигурации/компоновщик/оптимизация/генерация кода времени канала Чтобы...  Одна из настроек не по умолчанию

Возможно, https://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx используется?

Neil

Ответ 4

Это сообщение показывает много, что вызывает подозрение. Я использую лист свойств, который сообщает как /GL, так и /LTCG. В проекте не используются внешние библиотеки. И я получаю это сообщение, которое не имеет никакого смысла. Он исчезает, если я перехожу к свойствам проекта и снова укажу "Использовать временное кодирование ссылок". Он не меняет командную строку или что-то еще, но просто делает VC счастливым...