Visual Studio 2010 - エラー・ワーニング - リンクエラーなど
- 1. LINK : /LTCG が指定されましたが、コードの生成は必要ありません
- 2. LNK1255: メタデータエラーのためにリンクに失敗しました
- 3. LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています
- 4. LNK1257: コードの生成に失敗しました
1. LINK : /LTCG が指定されましたが、コードの生成は必要ありません
ビルドすると「LINK : /LTCG が指定されましたが、コードの生成は必要ありません。リンク コマンド ラインから /LTCG を削除し、リンカーの性能を改善してください。」と出力されるときは
プロジェクト右クリック →「構成プロパティ」→「リンカ―」→「最適化」→「リンク時のコード生成」を
「リンク時のコード生成を使用」から「規定」へ変更して「OK」

これで表示されなくなります。
2. LNK1255: メタデータエラーのためにリンクに失敗しました
ビルドしていて以下のようなエラーが出ることがあります。
これは主に2つの原因があります。
1>------ ビルド開始: プロジェクト: プロジェクト名, 構成: Debug Win32 ------
1> ライブラリ ./Debug/ライブラリ名.lib とオブジェクト ./Debug/ライブラリ名.exp を作成中
1>モジュール名.obj : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (モジュール名): (0x020004e0)。
1>LINK : fatal error LNK1255: メタデータエラーのためにリンクに失敗しました。
①原因1
もともとネイティブで作成していたプロジェクトのプロパティの『共通言語ラインタイムサポート』を『共通言語ランタイムサポートを使用しない』から『共通言語ランタイムサポート (/clr)』に変更した場合。
同じ構造体名のものが別々のヘッダで別の形で定義されているために起こるもののようです。このような中途半端な対応のものであるという時点で製品の不備だとは思いますが・・・仕方ない。
こういうケースの場合は、あきらめてプロパティを『共通言語ランタイムサポートを使用しない』に戻して、プロジェクトを1から作り直すか、ネイティブのまま使用するしかありません。
②原因2
ヘッダを変更した時に、プロジェクト内のモジュールで変更ヘッダを直接 include していないときにコンパイル対象から外れてしまうために起こる。
これは対処のしようがあります。エラーとなったモジュールを手動でコンパイルしなおしてビルドするか、プロジェクト全体をリビルドします。
3. LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています
この項は「VS2010でLNK1123エラーが出たら、SP1にしてみよう」の記事を参考にさせていただきました。
実際このエラーが出たのです。
理由として考えられるのは
・ファイルが破損している
・ファイル形式が無効
・Visual C++ Service Pack1 (SP1) より古いバージョンのVC++を使っている
とのことですが、obj 等のファイルをいったん削除して、ソースファイルが壊れていないことまで確認してもエラーが一向に治りませんでした。
結局、SP1 をインストールするしか解消する方法はありませんでした。
2018年現在、SP1 のスタンドアロンインストーラは、直接のダウンロードサイトは、なくなりました。
探し方が下記にあります。
「Visual Studio 2010 Service Pack 1 の入手方法について」
4. LNK1257: コードの生成に失敗しました
ビルド中にこんなエラーが発生しました。
10> コード生成しています。
10>E:\フォルダ名\ファイル名.cpp : fatal error C1001: コンパイラで内部エラーが発生しました。
10> (コンパイラ ファイル 'f:\dd\vctools\compiler\utc\src\p2\p2symtab.c'、行 6076)
10> この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。
10> 詳細については、Visual C++ ヘルプ メニューのサポート情報コマンドを
10> 選択してください。またはサポート情報 ヘルプ ファイルを参照してください。
10>LINK : fatal error LNK1257: コードの生成に失敗しました。
リンク中なんですけどね。「コンパイラで内部エラーが発生しました。」って。コンパイラファイルってのもドライブ名やらなんかのシンボルなんでしょうが・・・。
まあ、ソリューション一式をもってきてビルドしようとしたためかと思われます。
上記のエラーが発生したソースを単体でコンパイルしてソリューションをビルドすると正常にビルドできました。
|
|