Visual C++のエラーC1033、C2471の原因。

 Visual C++でプロジェクトをビルドしている時、稀に

C2471: プログラム データベース 'file' を更新できません。
C1033: プログラム データベース 'file' を開けません。

というようなエラーが出る場合がある。
 多くの場合、これはソースコードの誤りなどではなくストレージなどの問題である。私の場合Visual StudioのソリューションをOne Drive下に作成していることで稀にファイルの同期と競合してしまうのか、このエラーを時々見ている。大抵、One Driveの同期を一時停止すれば解決した。

 ただ今回はちょっと珍しいケースに遭遇した。プログラムデータベースというのは.pdbファイルのことで、各々のプロジェクトフォルダの中に作成されているはずだが、これの2GBというファイルサイズ上限に引っかかってしまったようなのだ。
 テンプレートを使って徹底的に仮想関数を廃したちょっとゴリ押しのプログラムを作ってみたところ、メモリの乏しいPCではメモリ不足でコンパイルできないほどの代物が出来上がってしまったのだが、メモリ44GBを搭載するPCでビルドしてもなお上記のエラーが出てしまい頭を抱えていたところ、.pdbファイルの大きさが2.16GBにまで巨大化していることに気がついた。プロジェクトの設定やバージョンにもよるだろうが、これは最大で2GBまでしか扱えないようだ。

 .pdbファイルとは要するにデバッグ情報を保持しているファイルのことだ。これはプロジェクトのプロパティで「C/C++->全般->デバッグ情報の形式」に「なし」以外のものを指定している時に生成される。
 ということは、もしデバッグ情報が一切不要であるのなら、これを「なし」にしてしまえばよい。ファイルそのものが生成されないのでエラーの起こりようがない。けれどもデバッグが不要なプロジェクトというのはなかなか存在しないので、可能なら別の方法を探したいところである。
 別の解決方法としては、プロジェクトを分割するという手がないわけではない。プロジェクトを分割すればそれに伴って.pdbファイルも分割されるので、恐らくビルドはできる。私が試した際は.pdbファイルとはまた別の問題が発生してしまったが。