ぐっちーの駄弁り部屋

個人的に制作しているものの進捗や日常について不定期投稿

勉強のために写経したかっただけなのに…

皆さんこんにちはグッチーです。
最近めっきり寒くなってきましたね。件の感染症もまた流行り始めたので体調管理には気をつけねば…

さて今日はここ数日引っかかってた問題について解決した(はず)なのでそれについて話していきたいなと思います。
どちらかと言うと個人的な備忘録的なものに近いです。

何があったのか

まずは何があったのかお話したいと思います。先週の金曜くらいまで卒論関連でバタバタしてたんですが一応落ち着いたので積読の解消をしようと思いまして「ゲームプログラマになる前に覚えておきたい技術」という本を読んでいたんです。
この本はVisualStudioとC++を使ってゲームを作りながら2D/3Dグラフィックの基礎や衝突判定などUnityでゲーム作るときにはUnityがやってくれている部分について学ぶことができる本で結構有名な本です。
私はC++自体初心者で開発なんかはもってのほかなんですが興味自体はあったので少しずつ勉強している最中だったのです。まとまった時間が取れそうだったので今回この本をガッツリ進めようと読み始めたわけです。
C++を書いた経験自体が少ないので書き方やらも併せて勉強しようと思ってサンプルコードを写経してたわけなんですが2章に差し掛かったあたりで全く同じコードを書いてるのにコードがちゃんと動かないという壁にぶち当たりました。
その章から著者の方が用意してくださったライブラリを使っていたのでそれの参照が間違っているのかと思いそのあたりを調べながら差し替えてもだめでした。(VisualStudioの使い方にもなれていないのでここの差し替えですら時間がかかりました)
ネットで原因を調べているとバージョンが合っていないのが原因らしいことがわかりました。
この本自体発行が2008年と相当前で今売られているものも第1版のものなのでプロジェクトは当時のVisualStudio2005と2008で動くように作られています。
なのでそれをしっかり治す必要があったというのが今回ぶつかった問題です。次の章で治すまでに私がしたことを書きたいと思います。

ライブラリ関連ファイルのビルド

私の今回の環境はWindows10、VisualStudio2019です。2015、2017あたりのバージョンについては他の方が記事にされていますが方法としては同じだと思います。
問題となっているのはサンプルコードの中にあるGameLibというライブラリでこれを自分のVisualStudio用にビルドし直す必要があります。ビルドし直す方法は以下のサイトを参考に進めていけば大丈夫です。

log.moremorefor.net

流れとしては2012用のサンプルコードが出版社から提供されている(それでも古い)のでそれのGameLibを必要に応じてビルドし直すという形です
私のようにからのプロジェクトを作成して写経している方についてはビルドし直したライブラリを読み込んでくれるように、

するのを忘れないでください。
環境変数を使って指定すればいいような感じがするのですが私の場合何故か読み込んでくれなかったので絶対パスをそのまま打ち込みました。

ランタイムライブラリの設定

もしかしたら私だけなのかもしれませんが前項で書いたことを済ませていざビルドしたところおびただしい数のエラーを吐きました。
エラーの内容はこんな感じ(違うファイルに対して同じのがたくさん出てました)
LNK2038 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。 VisualStudioのエラーにはもちろん詳しくないのでエラー文をGoogle先生にパスしたところリンクしようとしたライブラリのランタイムライブラリとプログラムがリンクしているランタイムライブラリのスペックが違うことで起こるエラーらしいです。
解決方法としてはプロジェクトのプロパティから

  • プロパティ>C/C++>コード生成>ランタイムライブラリ の項目をマルチスレッドデバッグ(/MTD)に変更

すればOKです。

おわりに

本の内容に理解ができず苦戦する前に実行環境の整備に四苦八苦していました。
写経する勉強法をしている人がわりといるイメージなんですが実際どうなんでしょう?みなさんのプログラミング勉強法を教えていただけると幸いです。
他にも自分のように本編に入る前に苦戦している人の助けになれば嬉しいです。
それでは今日はこのへんで( ー`дー´)キリッ

参考記事

log.moremorefor.net

teratail.com

docs.microsoft.com