• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++STLについての質問です。)

C++STLについての質問です。

このQ&Aのポイント
  • Visual C++ 2008 Express Editionを使用してDirectXアプリケーションを作成しています。std::listテンプレートを使用すると、リンクエラーが発生します。
  • ネットで検索した結果、ソリューション構成をDebugからReleaseに変更することで解決できるかもしれません。
  • コード生成モードはマルチスレッドで作成していますが、問題が発生しています。解決方法について知っている方はいますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

#pragmaディレクティブでリンクすると成功したというのは、 リリース版でのリンクが成功したということでしょうか? であれば、リリース版のプロジェクト設定が行われて いなかっただけの可能性が高いです。 どの様に判断されたかわかりませんが、 その状態で、バージョンが関係ないと 言われても説得力がありません。 DirecX9は古いバージョンと 新しいバージョンでは引数の変更により、 外部シンボルが変更されています。 特に、質問にあるエラーはランタイムライブラリに ついてのリンクが2重に行われている場合に出るエラーです。 旧バージョンのDirectXはスタティックリンクである場合もあり、 STL以外に独自のライブラリなどを使っている場合には Cのランタイムが既にリンクされている場合もあります。

ClickHere
質問者

お礼

ご回答、ありがとうございます。 March 2008 ↓ Summer 2004 の優先度でディレクトリを設定しています。 Summer 2004があるのは、 DirectX8でプログラムをする際に d3d8.h d3dx8.h を使用する為です(これ以降のバージョンには含まれていないので)。

その他の回答 (3)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

DirectXの環境が2つ入っているということでしょうか? 環境がちょっと良く分かりませんが、 SDK的には共存させないほうが良いと思います。 #見た感じMSにはできるとも出来ないとも書いてないですが。 #そういう場合は大抵、過去の機能はバッサリ切って、 #コンパイルスイッチで切り分けておくほうが良いと思います。 1つ目のデバック版でのエラーについては、 一応、確認ですが独自で作成したライブラリなどは 使用されていないでしょうか? もし、使用しているならCのランタイムライブラリを 使用していないかなどを確認し必要なら、 警告にあるとおり、/NODEFAULTLIB:libraryなどで ランタイムを無視してリンクする必要があるかもしれません。 #リンクできてもまともにデバッグできないかもしれませんが。 LIBCMTとあることから、 デバッグ版リンクであるにもかかわらず リリース版のライブラリオブジェクトを 含んでいるスタティックリンクライブラリが、 リンクしようとしているオブジェクトに含まれているようです。 この為、既にリンクされたライブラリと競合しているうえに、 デバッグ版とリリース版で差異があることから、 関数シンボルが見つからないといわれています。 >コード生成モードは、マルチスレッド(/MT)で作成しています。 念のためこれも確認ですが、 これはリリース版についてということで良いでしょうか? デバッグ版である場合は、デバッグ版のコード生成モードが (/MTd)になっているかを確認してください。 STLで使用されるリンクライブラリが異なります。 2つ目のエラーはさきの回答でも書きましたが、 デバッグ版では指定されている、リンクライブラリの設定が リリース版でされていない可能性があるので、 確認してみてください。

ClickHere
質問者

お礼

ご回答、ありがとうございます。 確認もしてみましたが、リリース版(/MT)となっていました。 元々がVC++のランタイム依存問題が嫌いなので、まず間違いなくコード生成の 設定は変更しています。 やはり、SDKの競合が発生しているのかもしれませんが#pragmaディレクティブでも同じ結果にならないことは少々疑問ではありますが…。 自作または他のライブラリは一切使用していません。MS一筋です。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

お使いのDirectX SDKのバージョンはいくつですか?

ClickHere
質問者

お礼

DirectXのバージョンは関係ないようです。 #pragmaディレクティブでリンクすると問題なくコンパイルできました。 ですが…やはり、通常の方法でリンクできることに越した事はありませんね。 そもそも、STL自体がリンクできないことに疑問がありますし…。 最後になりましたが、ご回答ありがとうございます。 何か思い当たる節などありましたら、またの助言をお願いします。

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

単純にリンクするファイルの指定が足りないだけかと・・・ D3dx9.libとかD3D9.libとか・・・

ClickHere
質問者

お礼

ご回答、感謝です。 画像の様にリンカは設定済みです。 ソリューションの構成をDebugにするか、コードの生成を/MTに指定しなければ 問題なくリンクもできますし、実行もできます。 …ただ、リストを使用しなければが前提ですが。

ClickHere
質問者

補足

画像のように…とありましたが、いつのまにかgooは画像が指定できなくなったことを今更知りました。 d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib 上記のとおり、ライブラリの指定は問題ありません。

関連するQ&A

専門家に質問してみよう