web-dev-qa-db-fra.com

Quelles sont les causes de l'avertissement de l'éditeur de liens ".Module ou module MSIL compilé avec / GL trouvé; redémarrage de la liaison avec / LTCG"?

Certains projets de ma solution produisent cet avertissement de l'éditeur de liens:

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

J'utilise Visual Studio 2013 Update 3. Je n'ai pas encore pu identifier quoi que ce soit de particulier à ces projets qui pourraient provoquer cela.

Qu'est-ce que ces projets produisent?


J'ai regardé ceci: http://msdn.Microsoft.com/en-us/library/k669k83h.aspx mais je ne suis pas au courant que nous utilisons n'importe quel CLR, code managé,/LN ou/NOASSEMBLY.

30
Scott Langham

J'ai eu le même problème, alors j'ai fait des recherches.

Selon https://msdn.Microsoft.com/en-us/library/0zza0de8.aspx :

Si vous compilez votre programme avec/GL et/c, vous devez utiliser l'option de l'éditeur de liens/LTCG pour créer le fichier de sortie.

Le message peut donc être un peu trompeur - le problème n'est pas le MSIL .netmodule, mais les modules compilés avec /GL

Lors de l'utilisation de /GL, vous dites au compilateur de retarder la génération de code, notamment autour des limites des fonctions, afin de les optimiser. LTCG demande à l'éditeur de liens de générer (et d'optimiser) le code manquant. Sinon, le programme ne s'exécutera pas comme prévu.

Fondamentalement, les deux commutateurs doivent être utilisés ensemble (lorsqu'ils sont utilisés). Ils s'appliquent à différentes parties de la construction: une pour la compilation et l'autre pour le lien.

Pour être complet:

  • /GLest contrôlé à partir des propriétés de configuration> C/C++> Optimisation> Optimisation du programme entier

  • /LTCG est contrôlé à partir des propriétés de configuration> Éditeur de liens> Optimisation> Optimisation de l'ensemble du programme

Sur les versions ultérieures,

  • /LTCG est contrôlé à partir des propriétés de configuration> Éditeur de liens> Optimisation> Génération de code temporel de liaison/Utiliser la génération de code temporel de liaison (/ LTCG)
32
Ionel POP

J'ai rencontré la même erreur et j'ai passé beaucoup de temps à essayer de la réparer. Enfin, j'ai compris que cela apparaissait en raison de l'utilisation de l'option "Whole Program Optimization" dans l'une de mes bibliothèques de dépendances.

Par défaut, cette option est définie sur "Oui" dans les projets nouvellement créés. Lorsque je l'ai changé en "Non" et recompilé toutes les dépendances, l'avertissement a disparu. J'ai une solution C++ purement native sans aucun code managé.

Pour corriger, ouvrez les paramètres de projet de tous les projets de dépendance et vérifiez les paramètres:

Propriétés de configuration> C/C++> Optimisation> Optimisation de l'ensemble du programme

Assurez-vous qu'il est réglé sur "Non" partout.

13
Boris Zinchenko

Je trouve que la même erreur disparaît en informant l'éditeur de liens du paramètre/GL que vous avez utilisé:

Définir ... Propriétés de configuration/Éditeur de liens/Optimisation/Générer le code temporel du lien vers ... Un des paramètres non par défaut

Peut-être https://msdn.Microsoft.com/en-us/library/xbf3tbeh.aspx est d'une certaine utilité?

Neil

2
Neil Gatenby

Ce message en montre beaucoup, ce qui soulève vraiment des soupçons. J'utilise une feuille de propriétés qui indique à la fois/GL et/LTCG. Le projet n'utilise aucune bibliothèque externe. Et je reçois ce message, qui n'a aucun sens. Il disparaît si je vais dans les propriétés du projet et que je spécifie à nouveau "Utiliser la génération de code temporel de lien" Cela ne change pas la ligne de commande ou quoi que ce soit, mais rend juste VC heureux ...

1
jj99