web-dev-qa-db-ja.com

リンカー警告「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 Update 3を使用しています。これを引き起こす可能性のあるプロジェクトに特有の何かをまだ特定できていません。

これを生み出すプロジェクトについてはどうですか?


私はこれを見ました: http://msdn.Microsoft.com/en-us/library/k669k83h.aspx しかし、CLR、マネージコード、/ LNを使用していることを知りませんまたは/ NOASSEMBLY。

30
Scott Langham

私は同じ問題を抱えていたので、いくつかの研究をしました。

https://msdn.Microsoft.com/en-us/library/0zza0de8.aspx によると:

/ GLおよび/ cを使用してプログラムをコンパイルする場合は、/ LTCGリンカーオプションを使用して出力ファイルを作成する必要があります。

メッセージは少し誤解を招く可能性があります-問題はMSIL .netmoduleではなく、/GLでコンパイルされたモジュールです

/GLを使用する場合は、最適化するために、いくつかのコード、つまり関数の境界周辺の生成を遅らせるようコンパイラーに指示します。 LTCGは、欠落コードを生成(および最適化)するようにリンカーに指示します。そうしないと、プログラムは期待どおりに実行されません。

基本的に、2つのスイッチは一緒に使用する必要があります(使用する場合)。それらは、ビルドのさまざまな部分に適用されます。1つはコンパイル用で、もう1つはリンク用です。

完全を期すために:

  • /GLは、[構成プロパティ]> [C/C++]> [最適化]> [プログラム全体の最適化]で制御されます

  • /LTCGは、[構成プロパティ]> [リンカー]> [最適化]> [プログラム全体の最適化]で制御されます

それ以降のバージョンでは、

  • /LTCGは、[構成プロパティ]> [リンカー]> [最適化]> [リンクタイムコード生成/リンクタイムコード生成の使用(/ LTCG)]で制御されます。
32
Ionel POP

同じエラーが発生し、修正にかなりの時間を費やしました。最後に、依存ライブラリの1つで「プログラム全体の最適化」オプションを使用したために表示されることがわかりました。

デフォルトでは、新しく作成されたプロジェクトでは、このオプションは「はい」に設定されています。 「いいえ」に変更し、すべての依存関係を再コンパイルすると、警告が消えました。マネージコードのない純粋にネイティブなC++ソリューションがあります。

修正するには、すべての依存関係プロジェクトのプロジェクト設定を開き、設定を確認します。

構成プロパティ> C/C++>最適化>プログラム全体の最適化

どこでも「いいえ」に設定されていることを確認してください。

13
Boris Zinchenko

同じエラーは、使用した/ GL設定についてリンカーに通知することで消えます。

設定...構成プロパティ/リンカー/最適化/リンクタイムコードの生成先...デフォルト以外の設定の1つ

たぶん https://msdn.Microsoft.com/en-us/library/xbf3tbeh.aspx が役に立つでしょうか?

ニール

2
Neil Gatenby

このメッセージは多くのことを示しており、実際に疑念を引き起こしています。/GLと/ LTCGの両方を示すプロパティシートを使用します。プロジェクトは外部ライブラリを使用していません。そして、私はこのメッセージを受け取りますが、それは何の意味もありません。プロジェクトプロパティに移動して、そこから「リンクタイムコード生成を使用」を再度指定すると、表示されなくなります。コマンドラインなどは変更しませんが、VC happy ...

1
jj99