[C/C++] lnk1112エラーの原因と対処法:「モジュールのコンピューターの種類が競合しています。」
LNK1112エラーは、C/C++プログラムのリンク時に発生し、「モジュールのコンピューターの種類が競合しています。」というメッセージが表示されます。
このエラーは、プロジェクトのターゲットプラットフォームとリンクされるライブラリのプラットフォームが一致していない場合に発生します。
例えば、x86アーキテクチャ用にコンパイルされたライブラリをx64プロジェクトで使用しようとすると、このエラーが発生します。
解決策としては、プロジェクト設定でターゲットプラットフォームを正しく設定し、使用するライブラリが同じアーキテクチャ用であることを確認することが重要です。
LNK1112エラーの概要
LNK1112エラーは、C/C++プログラムのビルド時に発生するリンカエラーの一つで、「モジュールのコンピューターの種類が競合しています」というメッセージが表示されます。
このエラーは、異なるプラットフォーム用にコンパイルされたオブジェクトファイルをリンクしようとした際に発生します。
例えば、x86用にコンパイルされたモジュールとx64用にコンパイルされたモジュールを同時にリンクしようとすると、このエラーが発生します。
プラットフォームの不一致やビルドツールの不足が主な原因であり、適切なコンパイラ設定やビルドツールのインストールによって解決できます。
LNK1112エラーの原因
LNK1112エラーは、異なるプラットフォーム用にコンパイルされたモジュールをリンクしようとした際に発生します。
以下に、具体的な原因を詳しく解説します。
コンパイラの不一致
コンパイラの不一致は、LNK1112エラーの最も一般的な原因の一つです。
異なるアーキテクチャ用にコンパイルされたオブジェクトファイルをリンクしようとすると、エラーが発生します。
x86とx64の不一致
x86(32ビット)とx64(64ビット)の不一致は、特に多く見られる問題です。
例えば、x86用にコンパイルされたライブラリとx64用にコンパイルされたアプリケーションをリンクしようとすると、LNK1112エラーが発生します。
これは、32ビットと64ビットのアーキテクチャが異なるため、互換性がないことが原因です。
ARMとARM64の不一致
ARMとARM64の不一致も、LNK1112エラーの原因となります。
ARMは32ビットアーキテクチャであり、ARM64は64ビットアーキテクチャです。
これらの異なるアーキテクチャ用にコンパイルされたモジュールをリンクしようとすると、エラーが発生します。
プラットフォームターゲットの誤設定
プロジェクトのプラットフォームターゲットが誤って設定されている場合も、LNK1112エラーが発生します。
例えば、プロジェクトの設定がx64になっているのに、x86用のライブラリをリンクしようとすると、エラーが発生します。
プラットフォームターゲットの設定は、Visual Studioのプロジェクトプロパティで確認および修正できます。
不足しているビルドツール
必要なビルドツールがインストールされていない場合も、LNK1112エラーの原因となります。
特に、64ビットアプリケーションを開発しているのに、64ビット用のVisual C++コンパイラがインストールされていない場合や、ARMまたはARM64プラットフォームを対象としているのに、対応するビルドツールが不足している場合に発生します。
この問題を解決するには、Visual Studioインストーラーを使用して不足しているコンポーネントをインストールする必要があります。
LNK1112エラーの対処法
LNK1112エラーを解決するためには、プラットフォームターゲットの確認と修正、ビルドツールのインストール、ソリューションのクリーンとリビルドが重要です。
以下に具体的な対処法を解説します。
プラットフォームターゲットの確認と修正
プラットフォームターゲットの設定が正しいかどうかを確認し、必要に応じて修正することが重要です。
Visual Studioでの設定確認
- Visual Studioでプロジェクトを開きます。
- メニューから「ビルド」→「構成マネージャー」を選択します。
- 「アクティブソリューションプラットフォーム」を確認し、ターゲットプラットフォームが正しいか確認します。
プロジェクトプロパティの調整
- ソリューションエクスプローラーでプロジェクトを右クリックし、「プロパティ」を選択します。
- 「構成プロパティ」→「全般」を選択し、「プラットフォームターゲット」を確認します。
- 必要に応じて、正しいプラットフォーム(例:x86、x64、ARM、ARM64)に設定を変更します。
ビルドツールのインストール
必要なビルドツールがインストールされているか確認し、不足している場合は追加します。
Visual Studioインストーラーの使用
- Visual Studioを閉じ、Visual Studioインストーラーを起動します。
- 「変更」をクリックし、インストール済みのワークロードを確認します。
必要なコンポーネントの追加
- 「C++によるデスクトップ開発」や「C++によるモバイル開発」など、必要なワークロードを選択します。
- 「個別のコンポーネント」タブで、必要なビルドツール(例:x64コンパイラ、ARMビルドツール)を選択し、インストールします。
ソリューションのクリーンとリビルド
ソリューションをクリーンし、リビルドすることで、古い中間ファイルを削除し、エラーを解決することができます。
中間出力ファイルの削除
- ソリューションエクスプローラーでプロジェクトを右クリックし、「クリーン」を選択します。
- これにより、中間出力ファイルが削除されます。
ソリューションのクリーン
- メニューから「ビルド」→「ソリューションのクリーン」を選択します。
- これにより、すべてのプロジェクトの中間ファイルが削除されます。
ソリューションのリビルド
- メニューから「ビルド」→「ソリューションのリビルド」を選択します。
- これにより、すべてのプロジェクトが再コンパイルされ、エラーが解決される可能性があります。
まとめ
この記事では、LNK1112エラーの原因と対処法について詳しく解説しました。
LNK1112エラーは、異なるプラットフォーム用にコンパイルされたモジュールをリンクしようとした際に発生するリンカエラーであり、プラットフォームターゲットの確認やビルドツールのインストール、ソリューションのクリーンとリビルドが重要な対処法です。
これらの知識を活用し、プロジェクトの設定を見直すことで、エラーの発生を未然に防ぎ、スムーズな開発環境を整えていきましょう。