「mfc120.lib (mfcXXX.lib) が開けません」と言われた時、「そんな古いライブラリ、設定のどこにも書いてないのに!」と頭を抱えたことはありませんか? コードにもプロジェクト設定にも記述がないのに、ビルドが通らない。これは、私たちが「ワナ」によくハマる典型的なパターンです。
この記事では、そんな「見えないライブラリ指定」の犯人を特定し、解決するための手順をまとめました。まずはじめに、この手順で切り分けてみてください。
エラーの原因切り分け:なぜ「書いていない」ファイルが要求される?
まずは、エラー番号と状況から原因を整理しましょう。
| エラー | 症状 | 原因の可能性 |
| LNK1104 | ファイル自体がない / 開けない | 連鎖依存 (Implicit Linking) |
| LNK2019 | シンボル (関数/変数) が合わない | 設定の不一致 (x64/x86) 等 |
今回のケースは LNK1104 です。しかし、単なるパス設定ミスではなく、外部ライブラリの中に埋め込まれた「古い記憶(リンク指示)」が原因であるケースがほとんどです。
検証環境:
Visual Studio 2026
Visual Studio 2008:今回は2008で作成したOldLib.libというライブラリを使用しました。
手順1: 「見えない鎖」の正体を知る (所要時間:2分)
なぜ VS2026 でビルドしているのに、VS2008 (mfc90u.lib) が要求されるのでしょうか。
原因は、リンクしている「自社製ライブラリ」や「サードパーティ製ライブラリ(.lib)」の中にあります。
C++には #pragma comment(lib, "...") という機能があり、ライブラリを作成した時点の環境情報(「俺は mfc90u.lib を使うぞ」という記録)が .lib ファイル内に埋め込まれます。これを Default Library Search Record と呼びます。
VS2026 のリンカーは親切にもこの記録を読み取り、指示通りに mfc90u.lib を探そうとします。しかし、今の PC にそんな古いファイルはありません。これが「コードに書いていないのにエラーが出る」カラクリです。
手順2: 犯人のライブラリを「自白」させる (所要時間:5分)
「どの .lib が古い MFC を呼んでいるのか?」さえ分かれば解決できます。リンカーの診断機能を使って、隠れた依存関係を暴きましょう。
- プロジェクトのプロパティ を開きます(ソリューションエクスプローラーで右クリック)。
- [リンカー] > [全般] を選択します。
- [詳細なリンカー出力の表示] (Show Progress) を 「ライブラリの検索を表示 (/VERBOSE:LIB)」 に変更します。

- [OK] を押し、リビルドを実行します。
手順3: ログから「検索」と「要求」の連鎖を見つける (所要時間:5分)
ビルドが失敗したら、出力ウィンドウ(エラー一覧ではありません)を確認してください。大量のログが出ていますが、焦る必要はありません。
Ctrl + Fで、エラーになっているファイル名(例:mfc90u.lib)を検索します。- 以下のようなログの並びを探してください。
1> OldLib.lib を検索中: <-- ① ここが犯人!
1> "void __cdecl OldFunction(void)" ...
1> VS2026SampleDlg.obj で参照されています。
1> OldLib.lib(stdafx.obj) を読み込みました。
1> /DEFAULTLIB:mfc90u.lib オプションで処理を行いました。 <-- ② ここで要求している
このログは、「OldLib.lib を読み込んだら、その中に mfc90u.lib を使えという指示があったので、探したが見つからなかった」ことを意味しています。これで犯人が OldLib.lib だと特定できました。
注意: 調査が終わったら、ビルド速度が遅くなるため
/VERBOSE設定は必ず元に戻してください。
手順4: 修正フロー (所要時間:10〜30分)
犯人が分かったら、以下のいずれかで対処します。
- 対策A:ライブラリをリビルドする(推奨)
- そのライブラリ(例:
OldLib.lib)のソースコードがあるなら、VS2026 (v145) でビルドし直してください。依存関係がmfc145.libに更新され、最もきれいに解決します。
- そのライブラリ(例:
- 対策B:特定のライブラリを無視する(ソースがない場合)
- [リンカー] > [入力] > [特定の既定のライブラリの無視] に、エラーが出ている
mfc90u.libなどを入力します。 - ※ただし、ライブラリ内部で MFC の構造体に依存している場合、実行時にクラッシュするリスクがあります。
- [リンカー] > [入力] > [特定の既定のライブラリの無視] に、エラーが出ている
- 対策C:互換MFCラッパーを入れる
- mfc90u.lib (VS2008) の場合は、サポートが終了しているため、原則として 対策A(リビルド) が必要です。
最終手段:どうしても解決しない場合
上記を試しても解決しない、あるいは「ファイルはあるはずなのに開けない」場合は、基本に立ち返ってください。
- MFCのインストール忘れ: 新しいPC環境では、デフォルトでMFCが入っていないことが多々あります。VS Installerで「MFC」と検索し、チェックが入っているか確認してください。
- パスの指定ミス: 謎のパスエラーが出たら、相対パスではなく絶対パスで指定してみるのも手です。

まとめ:再発防止チェックリスト
最後に、次回の自分のためにこれだけは確認しておきましょう。
- [ ] ビルドエラーが出たら、まず
/VERBOSE:LIBでログを吐かせる - [ ] 「コードに書いてない」エラーは、リンクしている .lib の中身を疑う
- [ ] 古いプロジェクトの移行時は、全ライブラリのリビルドを検討する
- [ ] 新しいPCにはまず VS InstallerでMFCを入れる
MFCのビルドエラーは、原因さえ分かれば5分で直せます。「見えない鎖」に時間を奪われないよう、まずはリンカーに自白させることから始めましょう。
