質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

11119閲覧

Visual StudioでRuntime Libraryの不一致が検出される

l_h_l_h

総合スコア22

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/03/01 06:48

編集2019/03/01 16:24

Visual Studioでビルドをしようとすると

LNK2038 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。 Project1 C:\Users\ユーザ名\source\repos\Project1\Project1\libcpmtd.lib(xthrow.obj) 1

LNK2001 外部シンボル ""public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z)" は未解決です。 Project1 C:\Users\ユーザ名\source\repos\Project1\Project1\GameLib_d.lib(InFile.obj) 1

など大量のエラーが検出されます
調べてみてもよくわかりませんでした

やったこと

プロジェクトのプロパティより「追加のインクルードディレクトリ」に「C:\Users\ユーザ名\OneDrive\デスクトップ\GameLib2008\GameLib2008\2DGraphics1\include」を追加しました
「追加のライブラリディレクトリ」に「C:\Users\ユーザ名\OneDrive\デスクトップ\GameLib2008\GameLib2008\2DGraphics1\lib」を追加しました
「追加の依存ファイル」に「GameLib_d.lib」を追加しました

実行したいコードは以下の通りです

c++

1#include "GameLib/Framework.h" 2 3namespace GameLib { 4 void Framework::update() { 5 unsigned* vram = videoMemory(); 6 static unsigned i; 7 vram[i] += i * 100; 8 i += 9973; //1万以下最大の素数 9 i %= (width() * height()); 10 } 11} 12

ライブラリ、コードはすべて書籍に付属してきたもので、上記の実行手順も書籍に記載されている通りです
書籍の発行年は2011年で、使っているバージョンは2017です

ライブラリの中身が必要な場合は掲載します(使用許諾範囲内です)

どなたか分かる方いましたらご教授願います

追記:どうやらバージョン違いが原因のようです
当書籍を読破したことのある方がいらっしゃればお聞きしたいのですが、今後この書籍の使い方として
「読んでいく」「従来通り写経も行いライブラリは逐一リビルドしていく」「物が古いから参考程度にしておく」のどれが良いでしょうか
レビューの書き込みも古いものが多く、調べていくうちに一部では、今となっては少し古いとの声も見つけたので、どこまで参考にして良いか少し気になりました
もちろん基礎的な部分は大きく変わらないとは思いますが……質問とは直接関係ないですが、よければアドバイスいただきたいです

追記2:毎回リビルドは面倒だと思いこちらを参考に手順を踏んでいったのですが、途中で詰まってしまいました
ここから先はまた別のお話かと思うので、新たに質問を投稿しました
もしよろしければよろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2019/03/01 07:48

ちなみに使っているVisual Studioのバージョンはいくつですか?
l_h_l_h

2019/03/01 07:49

すみません、現在は2017を使っています
guest

回答3

0

こんにちは。

LNK2038 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。

MSVCは日本語が下手ですよね。これはリンクしようとしたライブラリがリンクしている標準ランタイム・ライブラリと、l_h_l_hさんがビルドしているプログラムがリンクしている標準ランタイム・ライブラリのスペックが異なる場合にでるものです。

前者はMTd(マルチスレッド対応の静的リンクのデバッグ版)で、後者はMDd(マルチスレッド対応の動的リンクのデバッグ版)です。標準ランタイムは混在できません。

/MD、/MT、/LD (ランタイム ライブラリの使用)を参考に、l_h_l_hさんのプログラムに MTd を指定すれば通るだろうと思います。

投稿2019/03/01 07:33

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

l_h_l_h

2019/03/01 07:54

回答ありがとうございます リンク先の指示に従ってランタイムライブラリをMTdに変更したところ、以下のエラーが出力されました 要素 <RuntimeLibrary> の値 "マルチスレッド デバッグ DLL (/MTd)" は無効です。 tests C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets 423
Chironian

2019/03/01 08:12

プロパティ・ページでドロップダウン・リストから選択されたでしょうか?手で文字を入力してないですよね? エラーメッセージに出ている選択肢は存在しない筈ですから。 手元のVisual Studio 2017には下記の選択肢がでてきます。 マルチスレッド (/MT) マルチスレッド デバッグ (/MTd) マルチスレッド DLL (/MD) マルチスレッド デバッグ DLL (/MDd)
l_h_l_h

2019/03/01 14:05

すみません、よくわからないまま手で変更していました ドロップダウンリストから選択したところ、ランタイムライブラリの不一致についてのエラーは出なくなりました ありがとうございます
guest

0

回答ではないのですが・・・下記に秀和システムからの更新があります。
本書CD-ROM収録のサンプルで動作がうまくいかない場合

投稿2019/03/01 07:29

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/03/01 07:31

「ゲームプログラマになる前に覚えておきたい技術」であればですが・・・
l_h_l_h

2019/03/01 07:42

回答ありがとうございます その書籍です どうやら2012で更新が止まっているようなので、自力で再ビルドしていくしかないようです
takabosoft

2019/03/01 07:48

2015/2017/2019用も用意してくれれば良いんですけどね~
guest

0

ベストアンサー

「ゲームプログラマになる前に覚えておきたい技術」でしたっけね。
前に見た記憶があります。

たぶん用意されているライブラリ(lib)がコンパイルされた環境(Visual Studio)と、
質問者さんが使っているVisual Studioのバージョンが一致していないと
そのようなリンクエラーが出ると思います。

ライブラリ自体のソースがあれば、自分でもう一度コンパイルしてlibを作り直せばいけそうな予感です。
お試しください。


追記:

当書籍を読破したことのある方がいらっしゃればお聞きしたいのですが、今後この書籍の使い方として
「読んでいく」「従来通り写経も行いライブラリは逐一リビルドしていく」「物が古いから参考程度にしておく」のどれが良いでしょうか

l_h_l_hさんのスペックや空き時間、何を目標としているか、などによって答えは変わってくるでしょうが、
例えば手っ取り早くゲームを作りたいのでしたら、UnityやUnreal Engineを使ってゲームを作る系の書籍を読んだ方が「今の時代的には合っている」のかもしれません。

ただ、「ゲームプログラマになる前に覚えておきたい技術」は、「ゲームを作る以前にこれぐらいは最低限知ってろよ」ぐらいの内容が書かれていたと思いますので、準備体操代わりに読んでも良いと思います(知っている内容なら読み飛ばせば良いですし)。

プログラムに関する書籍は何か1冊読めばその分野で完璧になることは基本的にはありえません。
沢山読んでください。

投稿2019/03/01 06:58

編集2019/03/01 08:56
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

l_h_l_h

2019/03/01 07:41

回答ありがとうございます まさしくその書籍です 当書籍のバージョン違いについて調べてみたところ以下のようなブログがヒットしました https://ch.nicovideo.jp/HadGeL/blomaga/ar1301338 http://log.moremorefor.net/entry/game-programmer-book-build-vs2015 visual studio内で、〇〇.libおよび〇〇.hというサンプルファイルを開いていってビルドしていけば解決する、という認識で良いでしょうか?
takabosoft

2019/03/01 07:52 編集

2個目のリンク先の手順通りやってもらえればよいかと思います。あとChironianさんの回答にも目を通してください(ランタイムライブラリの設定が違うと結局エラーは出そうです)。
l_h_l_h

2019/03/01 07:54

ありがとうございます 実施してみます
l_h_l_h

2019/03/01 07:58

ありがとうございます! そちらも試してみます
l_h_l_h

2019/03/01 16:31

追記についての回答もありがとうございます 実は以前、Unityの入門書を読んだりjavascriptのライブラリを使ったりして簡単なゲームを作ったことはあるのですが、ライブラリに頼る部分が多くあまりよくわからなかったこと、業界の人がポートフォリオとしてはunityなどは評価しづらい(実装力が見られないため)と言っていたことがあり、評判の良かった当書籍を借りてきたという感じなのです 調べてみると「レベルが高い」との声もチラホラあったのですが、そこは意見が分かれるところのようですね 目標は何とも言えませんが、就活ではそちらの業界も結構受けてみようと考えているレベルでした 色んな書籍を読んだほうが良いと言うのはその通りだと感じたので、今後も精進していきたいと思います ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問