Что вызывает предупреждение компоновщика "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
поручить компоновщику генерировать (и оптимизировать) недостающий код. В противном случае программа не будет работать, как ожидалось.
В принципе, два переключателя должны использоваться вместе (при использовании). Они применяются к различным частям сборки: один для компиляции, а другой для ссылки.
Для полноты:
В более поздних версиях
-
/LTCG
управляется с помощью свойств конфигурации > компоновщик > оптимизация > генерация кода временного кода канала/использование кода времени кода (/LTCG)
Ответ 2
Я столкнулся с такой же ошибкой и потратил немало времени, пытаясь ее исправить. Наконец, я понял, что он появился из-за использования опции "Оптимизация всей программы" в одной из моих библиотек зависимостей.
По умолчанию этот параметр установлен на "Да" во вновь созданных проектах. Когда я изменил его на "Нет" и перекомпилировал все зависимости, предупреждение исчезло. У меня чисто собственное решение на С++ без какого-либо управляемого кода.
Чтобы исправить, откройте настройки проекта для всех проектов зависимостей и проверьте настройку:
Свойства конфигурации > C/С++ > Оптимизация > Оптимизация всей программы
Убедитесь, что он установлен на "Нет".
Ответ 3
Я нахожу ту же самую ошибку, сообщая компоновщику о настройке /GL, которую вы использовали:
Установить... Свойства конфигурации/компоновщик/оптимизация/генерация кода времени канала
Чтобы... Одна из настроек не по умолчанию
Возможно, https://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx используется?
Neil
Ответ 4
Это сообщение показывает много, что вызывает подозрение. Я использую лист свойств, который сообщает как /GL, так и /LTCG. В проекте не используются внешние библиотеки. И я получаю это сообщение, которое не имеет никакого смысла. Он исчезает, если я перехожу к свойствам проекта и снова укажу "Использовать временное кодирование ссылок". Он не меняет командную строку или что-то еще, но просто делает VC счастливым...