さて、久しぶりに古いプロジェクトを開いた瞬間、出力ウィンドウを埋め尽くすリンクエラー(LNK〜)。
嫌になりますよね。
私もエラー文をそのままググって、よく分からない知恵袋の通りに設定をいじくり回し、余計に悪化させるという「ワナ」によくハマっていました。
この記事では、そんな時間を1秒でも減らすために私が実際にやった「見る順番」をそのまま、まとめました。むやみに設定をごちゃごちゃする前に、まずはこの手順で切り分けてみてください。
LNKエラーの原因切り分け:エラー番号で見るべき場所が決まる
エラー一覧の一番上に出ている番号を見てください。これで対応が真っ二つに分かれます。
| エラー | 何が起きてる? | 最初に疑う場所 |
|---|---|---|
| LNK1104 | ファイル自体がない / 開けない | MFCのインストール忘れ、パス設定、権限/ロック |
| LNK2019 / LNK2001 | ファイルはあるけど中身(関数/変数)が合わない | 設定の不一致(文字セット/x64)、ライブラリ指定漏れ、サブシステム |
以下、この順番でチェックしていきます。
手順1:まずは「構成」のズレを疑う(所要時間:1分)
LNKエラーは「コードは悪くないのに設定がズレている」パターンがかなり多いです。ここでズレていると、後ろの手順を頑張っても直りません。Visual Studioの上部にある「構成マネージャー」を確認してください。

- Debug / Release は合っていますか?
- x86(Win32) / x64 は合っていますか?
【よくある事故】
- 「x64」でビルドしようとしているのに、参照しているライブラリが「32bit(x86)版」のままになっている
- 「Debug」の設定だけ直して満足し、「Release」ビルドでエラーが出る
設定を触るときは、必ず画面上部の「構成」と「プラットフォーム」を確認してください。
迷ったら、一度 「すべての構成 / すべてのプラットフォーム」 を選択して、全パターン一括で設定するのも手です。
手順2:LNK1104「ファイルを開けません」の原因と対処
mfcxxxud.lib とか xxx.lib が開けないと言われているパターンです。
① MFCコンポーネントが入っていない(最頻出)
エラーファイル名が mfcxxx.lib や mfcxxxud.lib 系の場合、ほぼほぼこれが原因です。 最近のVisual Studioは、デフォルトでMFCを入れてくれません(「C++によるデスクトップ開発」を選んだだけじゃ入っていないことがあります)。
【直し方】
- Visual Studio Installer を起動
- 「変更」→「個別のコンポーネント」タブへ
- 検索窓に「MFC」と入力
- 最新のMSVCにチェックを入れてインストール

② ライブラリのパス/指定が足りない
MFC以外のライブラリ(自社ライブラリ.lib など)でこれが出る場合、リンカーがファイルを見つけられていません。 「フォルダは合ってるのに…」の時は、.lib自体の指定漏れもよくあります。
- プロジェクトのプロパティ → リンカー → 全般 → 追加のライブラリ ディレクトリ
- ここに、その
.libが入っているフォルダのパスが書いてあるか確認 - プロジェクトのプロパティ → リンカー → 入力 → 追加の依存ファイル
xxx.lib自体が列挙されているか確認(必要なら追加)
※ ついでに、同期ソフトやウイルス対策でファイルがロックされてLNK1104になることもあります。


手順3:LNK2019 / LNK2001「未解決の外部シンボル」の場合
「ファイルはあるけど、中身(つじつま)が合わないよ」という状態です。 ここが一番ハマりやすいですが、「どのシンボル(関数)でエラーが出ているか」で見ると一発です。
① CWinApp, CDialog, CString などで出ている
→ MFCを使う設定になっていません。
- プロジェクトのプロパティ → 詳細 → MFCの使用
- ここが
標準Windowsライブラリを使用する になっていたらアウトです - まずは 「共有 DLL で MFC を使用」(またはスタティック)に変えてください。これだけで直ることが本当に多いです

② _WinMain@16 や _wWinMain で出ている
→ 文字セットと入口(Main関数)が喧嘩しています。 さらに、サブシステム(Windows/Console)のズレでも似たエラーになります。 MFCには「Unicode(最近の主流)」と「マルチバイト(昔の主流)」の2つの世界があり、ここがズレると入口(Main関数)が見つからず、リンクエラーになります。
- 設定側: プロパティ → 詳細 → 文字セット
- コード側:
WinMain(マルチバイト) vswWinMain(Unicode) - 合わせて確認: プロパティ → リンカー → システム → サブシステム
- Windowsアプリなら
Windows (/SUBSYSTEM:WINDOWS)になっているか


最終手段:どうしても原因が分からない場合
「設定は合ってるはずなのに!!」
そんな時は、リンカーに「何をどう探して、なぜ弾いたのか」を全部自白させましょう。
- プロパティ → リンカー → 全般 → 詳細なリンカー出力の表示 を 「はい (/VERBOSE)」 に変更
- リビルドする
- 出力ウィンドウに大量のログが出るので、エラーになったシンボル名や
.lib名で検索 - これで「ディレクトリ
C:\libsを検索しました… 見つかりませんでした」といったログが出るので、原因を特定できます。 (※解決したら /VERBOSE は戻す)

まとめ:再発防止チェックリスト
最後に、次回の自分のためにこれだけは確認しておきましょう。
- [ ] 新しいPCにはまず VS InstallerでMFCを入れる
- [ ] 設定変更時は Debug/Release・Win32/x64 の不一致に気をつける
- [ ] 謎のパスエラーが出たら 絶対パス を疑う(可能なら相対パス化)
- [ ] WinMainのエラーは 文字セット + サブシステム をセットで疑う
MFCのビルドエラーは、原因さえ分かれば5分で直せます。 焦らず「構成」を確認してから、上記の手順を試してみてください。
