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

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

さて、久しぶりに古いプロジェクトを開いた瞬間、出力ウィンドウを埋め尽くすリンクエラー(LNK〜)

嫌になりますよね。
私もエラー文をそのままググって、よく分からない知恵袋の通りに設定をいじくり回し、余計に悪化させるという「ワナ」によくハマっていました。

この記事では、そんな時間を1秒でも減らすために私が実際にやった「見る順番」をそのまま、まとめました。むやみに設定をごちゃごちゃする前に、まずはこの手順で切り分けてみてください。

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

エラー一覧の一番上に出ている番号を見てください。これで対応が真っ二つに分かれます。

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

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

手順1:まずは「構成」のズレを疑う(所要時間:1分)

LNKエラーは「コードは悪くないのに設定がズレている」パターンがかなり多いです。ここでズレていると、後ろの手順を頑張っても直りません。Visual Studioの上部にある「構成マネージャー」を確認してください。

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

【よくある事故】

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

設定を触るときは、必ず画面上部の「構成」と「プラットフォーム」を確認してください。

迷ったら、一度 「すべての構成 / すべてのプラットフォーム」 を選択して、全パターン一括で設定するのも手です。

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

mfcxxxud.lib とか xxx.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自体の指定漏れもよくあります。

  • プロジェクトのプロパティ → リンカー → 全般 → 追加のライブラリ ディレクトリ
  • ここに、その .lib が入っているフォルダのパスが書いてあるか確認
  • プロジェクトのプロパティ → リンカー → 入力 → 追加の依存ファイル
  • xxx.lib 自体が列挙されているか確認(必要なら追加)
    ※ ついでに、同期ソフトやウイルス対策でファイルがロックされて LNK1104 になることもあります。

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

「ファイルはあるけど、中身(つじつま)が合わないよ」という状態です。 ここが一番ハマりやすいですが、「どのシンボル(関数)でエラーが出ているか」で見ると一発です。

CWinApp, CDialog, CString などで出ている

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

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

_WinMain@16_wWinMain で出ている

文字セット入口(Main関数)が喧嘩しています。 さらに、サブシステム(Windows/Console)のズレでも似たエラーになります。 MFCには「Unicode(最近の主流)」と「マルチバイト(昔の主流)」の2つの世界があり、ここがズレると入口(Main関数)が見つからず、リンクエラーになります。

  • 設定側: プロパティ → 詳細 → 文字セット
  • コード側: 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のエラーは 文字セット + サブシステム をセットで疑う

MFCのビルドエラーは、原因さえ分かれば5分で直せます。 焦らず「構成」を確認してから、上記の手順を試してみてください。