【MFC】LNK1104 / LNK2019 / LNK2001 ビルドエラー解決フロー:最短の確認順

【MFC】LNK1104 / LNK2019 / LNK2001 ビルドエラー解決フロー:最短の確認順

久しぶりに古いプロジェクトを開いたら、出力ウィンドウがリンクエラー(LNK〜)で埋まっていた、という経験は珍しくありません。
この記事では、むやみに設定をいじる前に見るべき場所を順番にまとめています。


目次

LNKエラーの原因切り分け:エラー番号で見るべき場所が決まる

まず、エラー一覧の一番上に出ている番号を確認してください。これで対応が二つに分かれます。

エラー何が起きてる?最初に疑う場所
LNK1104ファイル自体がない / 開けないMFCのインストール忘れ、パス設定、権限/ロック
LNK2019 / LNK2001ファイルはあるけど中身(関数/変数)が合わない設定の不一致(文字セット/x64)、ライブラリ指定漏れ、サブシステム

以下、この順番でチェックしていきます。


手順1:まずは「構成」のズレを疑う

LNKエラーは「コードは悪くないのに設定がズレている」パターンが多いです。ここがズレていると、後の手順をいくら頑張っても直りません。

Visual Studioの上部にある「構成マネージャー」を確認してください。

Visual Studio 2026 プロジェクトプロパティ 構成マネージャー 確認
  • Debug / Release は合っていますか?
  • x86(Win32) / x64 は合っていますか?

よくある事例:

  • x64でビルドしようとしているのに、参照しているライブラリが32bit(x86)版のまま
  • Debugの設定だけ直して満足し、Releaseビルドでもエラーが出る

設定を触るときは、必ず「構成」と「プラットフォーム」をセットで確認してください。迷ったら「すべての構成 / すべてのプラットフォーム」を選んで一括設定するのが確実です。


手順2:LNK1104「ファイルを開けません」の原因と対処

mfcxxxud.libxxx.lib が開けないと言われているパターンです。

① MFCコンポーネントが入っていない

エラーのファイル名が mfcxxx.libmfcxxxud.lib 系なら、まずここを疑ってください。

Visual StudioはデフォルトでMFCをインストールしません。「C++によるデスクトップ開発」を選んだだけでは入っていないことがあります。

直し方:

  1. Visual Studio Installer を起動
  2. 「変更」→「個別のコンポーネント」タブへ
  3. 検索窓に「MFC」と入力
  4. 最新のMSVCにチェックを入れてインストール
Visual Studio Installer MFCコンポーネント 追加手順

② ライブラリのパス/指定が足りない

MFC以外のライブラリ(自社ライブラリ等)でこれが出る場合、リンカーがファイルを見つけられていません。「フォルダは合っているのに…」という場合は、.lib自体の指定漏れも確認してください。

  • プロジェクトのプロパティ → リンカー → 全般 → 追加のライブラリ ディレクトリ
    .lib が入っているフォルダのパスがあるか確認します
  • プロジェクトのプロパティ → リンカー → 入力 → 追加の依存ファイル
    xxx.lib 自体が列挙されているか確認します(なければ追加)

※ 同期ソフトやウイルス対策でファイルがロックされてLNK1104になるケースもあります。


手順3:LNK2019 / LNK2001「未解決の外部シンボル」の場合

「ファイルはあるけど、中身が合わない」という状態です。どのシンボル(関数)でエラーが出ているかを見ると原因が一気に絞れます。

CWinAppCDialogCString などで出ている

MFCを使う設定になっていません。

  • プロジェクトのプロパティ → 詳細 → MFCの使用
  • ここが 「標準Windowsライブラリを使用する」 になっていたらアウトです
  • 「共有 DLL で MFC を使用」(またはスタティック)に変えてください。これだけで直ります
VS2026 MFC 設定

_WinMain@16_wWinMain で出ている

文字セット入口(Main関数)がズレています。

MFCには「Unicode(現在の主流)」と「マルチバイト(旧来)」の2系統があり、設定とコードが噛み合っていないと入口関数が見つからずリンクエラーになります。サブシステムのズレでも同じエラーが出るので、セットで確認してください。

  • 設定側: プロパティ → 詳細 → 文字セット
  • コード側: WinMain(マルチバイト)vs wWinMain(Unicode)になっているか
  • 合わせて確認: プロパティ → リンカー → システム → サブシステム
    → Windowsアプリなら Windows (/SUBSYSTEM:WINDOWS) になっているか

最終手段:それでも原因が分からない場合

「設定は合っているはずなのに直らない」という場合は、リンカーに何をどう探して、なぜ弾いたかを全部出力させます。

  1. プロパティ → リンカー → 全般 → 進行状況の表示 を 「詳細情報をすべて表示 (/VERBOSE)」 に変更
  2. リビルドする
  3. 出力ウィンドウに大量のログが出るので、エラーになったシンボル名や .lib 名で検索
  4. 「ディレクトリ C:\libs を検索しました… 見つかりませんでした」のようなログで原因を特定できます

※ 解決したら /VERBOSE は戻してください。ビルドが遅くなります。

VS2026 リンカー 進捗状況 設定

再発防止チェックリスト

  • [ ] 新しいPCにはまず VS InstallerでMFCを入れる
  • [ ] 設定変更時は Debug/Release・Win32/x64 の不一致に気をつける
  • [ ] 謎のパスエラーが出たら絶対パスを疑う(可能なら相対パス化)
  • [ ] WinMainのエラーは文字セット + サブシステムをセットで疑う
目次