

C++STLについての質問です。
Visual C++ 2008 Express Edition を使用してDirectXアプリケーションを
作成しています。
その折、std::listテンプレートを使用する機会があったのですが、このリストを
使用しますと、
リンクしています...
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。
libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
fatal error LNK1120: 外部参照 3 が未解決です。
とのエラーが吐かれます。
ネットで検索すると、ソリューション構成をDebugからReleaseにすれば良いとの記述が
ありましたので、実行してみました。しかし、
リンクしています...
error LNK2001: 外部シンボル "_D3DXCreateTextureFromFileExW@56" は未解決です。
error LNK2001: 外部シンボル "_D3DXCreateSprite@8" は未解決です。
error LNK2001: 外部シンボル "_D3DXGetImageInfoFromFileW@8" は未解決です。
error LNK2001: 外部シンボル "_Direct3DCreate9@4" は未解決です。
fatal error LNK1120: 外部参照 4 が未解決です
とのエラーが吐かれてしまいました。
尚、コード生成モードは、マルチスレッド(/MT)で作成しています。
どなたか、この問題を解決する方法をご存知ないでしょうか?
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
#pragmaディレクティブでリンクすると成功したというのは、
リリース版でのリンクが成功したということでしょうか?
であれば、リリース版のプロジェクト設定が行われて
いなかっただけの可能性が高いです。
どの様に判断されたかわかりませんが、
その状態で、バージョンが関係ないと
言われても説得力がありません。
DirecX9は古いバージョンと
新しいバージョンでは引数の変更により、
外部シンボルが変更されています。
特に、質問にあるエラーはランタイムライブラリに
ついてのリンクが2重に行われている場合に出るエラーです。
旧バージョンのDirectXはスタティックリンクである場合もあり、
STL以外に独自のライブラリなどを使っている場合には
Cのランタイムが既にリンクされている場合もあります。
ご回答、ありがとうございます。
March 2008
↓
Summer 2004
の優先度でディレクトリを設定しています。
Summer 2004があるのは、
DirectX8でプログラムをする際に
d3d8.h
d3dx8.h
を使用する為です(これ以降のバージョンには含まれていないので)。
No.4
- 回答日時:
DirectXの環境が2つ入っているということでしょうか?
環境がちょっと良く分かりませんが、
SDK的には共存させないほうが良いと思います。
#見た感じMSにはできるとも出来ないとも書いてないですが。
#そういう場合は大抵、過去の機能はバッサリ切って、
#コンパイルスイッチで切り分けておくほうが良いと思います。
1つ目のデバック版でのエラーについては、
一応、確認ですが独自で作成したライブラリなどは
使用されていないでしょうか?
もし、使用しているならCのランタイムライブラリを
使用していないかなどを確認し必要なら、
警告にあるとおり、/NODEFAULTLIB:libraryなどで
ランタイムを無視してリンクする必要があるかもしれません。
#リンクできてもまともにデバッグできないかもしれませんが。
LIBCMTとあることから、
デバッグ版リンクであるにもかかわらず
リリース版のライブラリオブジェクトを
含んでいるスタティックリンクライブラリが、
リンクしようとしているオブジェクトに含まれているようです。
この為、既にリンクされたライブラリと競合しているうえに、
デバッグ版とリリース版で差異があることから、
関数シンボルが見つからないといわれています。
>コード生成モードは、マルチスレッド(/MT)で作成しています。
念のためこれも確認ですが、
これはリリース版についてということで良いでしょうか?
デバッグ版である場合は、デバッグ版のコード生成モードが
(/MTd)になっているかを確認してください。
STLで使用されるリンクライブラリが異なります。
2つ目のエラーはさきの回答でも書きましたが、
デバッグ版では指定されている、リンクライブラリの設定が
リリース版でされていない可能性があるので、
確認してみてください。
ご回答、ありがとうございます。
確認もしてみましたが、リリース版(/MT)となっていました。
元々がVC++のランタイム依存問題が嫌いなので、まず間違いなくコード生成の
設定は変更しています。
やはり、SDKの競合が発生しているのかもしれませんが#pragmaディレクティブでも同じ結果にならないことは少々疑問ではありますが…。
自作または他のライブラリは一切使用していません。MS一筋です。
No.1
- 回答日時:
単純にリンクするファイルの指定が足りないだけかと・・・
D3dx9.libとかD3D9.libとか・・・
この回答への補足
画像のように…とありましたが、いつのまにかgooは画像が指定できなくなったことを今更知りました。
d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib
上記のとおり、ライブラリの指定は問題ありません。
ご回答、感謝です。
画像の様にリンカは設定済みです。
ソリューションの構成をDebugにするか、コードの生成を/MTに指定しなければ
問題なくリンクもできますし、実行もできます。
…ただ、リストを使用しなければが前提ですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- その他(プログラミング・Web制作) Python でWindowsのショートカット(.lnk)のプロパティを参照したい 1 2023/02/01 15:09
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++/MFCで error LNK2001
-
パブリックシンボルとは?
-
C言語のエラー LNK1120: 外部参照
-
popen・pcloseについて
-
c言語とfortranの混在プログラ...
-
外部依存関係について
-
OpenCVでの画像サイズ取得につ...
-
PathIsDirectoryを使って
-
外部シンボル" ~~"は未解決で...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
unsigned long long 型のフォー...
-
外部シンボル "_main"は未解決です
-
” OS ビルド ” の意味が分か...
-
MPI プログラム
-
デバッグとビルドは何が違うの...
-
sprintfの書式について
-
HANDLEの宣言でのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部依存関係について
-
外部シンボル" ~~"は未解決で...
-
外部シンボルの未解決のエラー
-
LNK2019: 外部シンボル どのよ...
-
error LNK2001について
-
MFC C++ と C++/CLI の文字列
-
wsprintfのエラーについて
-
未解決の外部シンボル
-
PathIsDirectoryを使って
-
LNK2001(Pro*c)
-
C言語のエラー LNK1120: 外部参照
-
エラー 未解決の外部シンボル
-
C++ Builderでユニットの追加
-
パブリックシンボルとは?
-
IP Helper APIを使うとエラーが...
-
C++の関数をfortranから呼びた...
-
LNK2019: 未解決の外部シンボル...
-
『外部シンボル~未解決です。...
-
gdiplusのリンクエラー
-
このプログラムを動かしたいの...
おすすめ情報