トップページ > 過去ログ > 記事閲覧
iostreamについて
名前:七篠 日時: 2009/05/15 03:16

はじめまして、七篠といいます。 プログラムに #include <iostream> を追加したところ、過去ログの ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=681 と同じerror LNK2019が出ました。 過去ログに沿って改善しようと試みましたが、DxLib.hの // VisualC++の標準メモリデバッグ機能又はSTLを使用する場合はコメントを外し、 // プロジェクトの設定でリンクするライブラリを『マルチスレッド デバッグ(/MTd)』 // に変更してください //#define DX_USE_VISUALC_MEM_DEBUG に該当する箇所が見つかりません。 現行のバージョンではやり方が違うのでしょうか? お時間があればお教えください。

Page: 1 |

Re: iostreamについて ( No.1 )
名前:tkmakwins15 日時:2009/05/16 08:22

プロジェクトの設定の、構成プロパティ→C++→コード生成のところの、ランタイムライブラリのところの設定を確認してください。 Debugなら「マルチスレッド デバッグ(/MTd)」 Releaseならば「マルチスレッド(/MT)」 になってますか?
Re: iostreamについて ( No.2 )
名前:七篠 日時:2009/05/16 22:28

tkmakwins15さま、ご返答ありがとうございます。 ランタイムライブラリの設定について確認しましたが、問題ないようです。 補足ですが、vectorなどのインクルードはうまくいきますし、 コンソールプログラムを組むときは同じVC++2008EEでiostreamも使っています。 もうiostream使わないプログラムを組んだ方が手っ取り早いかもしれません。
Re: iostreamについて ( No.3 )
名前:tkmakwins15 日時:2009/05/16 23:40

現行バージョンでは、Cランタイムライブラリに、DebugとReleaseで別のライブラリにリンクするようになっています。 ですから、DX_USE_VISUALC_MEM_DEBUGは必要なくなっているはずです。 エラーメッセージはそれだけですか?できれば、ビルド時のメッセージを全て載せていただきたいです。
Re: iostreamについて ( No.4 )
名前:七篠 日時:2009/05/17 00:18

ビルドしなおしてみました。 メッセージを比べると、確かに過去ログとは別のエラーのようです。 1>test.obj : error LNK2001: 外部シンボル ""public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ)" は未解決です。 1>test.obj : error LNK2001: 外部シンボル ""public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ)" は未解決です。 1>.\testprgrm.exe : fatal error LNK1120: 外部参照 2 が未解決です。 初回のビルドだとこういうエラーメッセージでした。 1>test.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)" (??__E_Ios_init@std@@YAXXZ) で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)" (??__F_Ios_init@std@@YAXXZ) で参照されました。 1>.\testprgrm.exe : fatal error LNK1120: 外部参照 2 が未解決です。 続けてビルドしたときerror LNK2019が出るみたいです。見落としていたerror LNK2001についても調べてみます。
Re: iostreamについて ( No.5 )
名前:tkmakwins15 日時:2009/05/17 07:04

うーん、たとえば、次のようなコードは通りますか? #include"DxLib.h" #include<iostream> int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT) { if(DxLib_Init()==-1)return -1; DxLib_End(); return 0; } 僕の環境ではビルドできました。
Re: iostreamについて ( No.6 )
名前:七篠 日時:2009/05/17 12:35

>うーん、たとえば、次のようなコードは通りますか? ビルドできませんでした。 やはりリンカの設定か環境自体に問題がありそうです。
Re: iostreamについて ( No.7 )
名前:tkmakwins15 日時:2009/05/17 13:50

そのときのエラーメッセージを見せてもらえませんか? 後、メニュー→プロジェクト→(プロジェクト名)のプロパティ→構成プロパティ→リンカ→コマンドライン のところの文字列を全て見せてください。これで何か分かるかも…
Re: iostreamについて ( No.8 )
名前:七篠 日時:2009/05/17 16:15

何度もすみません。 エラーメッセージは次のようなものでした。 1>------ ビルド開始: プロジェクト: testpgm, 構成: Debug Win32 ------ 1>コンパイルしています... 1>ios_test.cpp 1>c:\program files\microsoft platform sdk\include\mmreg.h : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 1>リンクしています... 1>ios_test.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)" (??__E_Ios_init@std@@YAXXZ) で参照されました。 1>ios_test.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が関数 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)" (??__F_Ios_init@std@@YAXXZ) で参照されました。 1>E:\GAMES\testpgm\Debug\testpgm.exe : fatal error LNK1120: 外部参照 2 が未解決です。 1>ビルドログは "file://e:\GAMES\testpgm\testpgm\Debug\BuildLog.htm" に保存されました。 1>testpgm - エラー 3、警告 1 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== コマンドラインオプションは デバッグ: /OUT:"E:\GAMES\testpgm\Debug\testpgm.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\testpgm.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"E:\GAMES\testpgm\Debug\testpgm.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib リリース: /OUT:"E:\GAMES\testpgm\Release\testpgm.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Release\testpgm.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"E:\GAMES\testpgm\Release\testpgm.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib です。
Re: iostreamについて ( No.9 )
名前:tkmakwins15 日時:2009/05/17 16:58

コマンドライン文字列には全く問題がないようですね… リンクエラーの意味そのものは、std::ios_baseクラスの内部クラスのInitクラスのコンストラクタとデストラクタが見つからないということなのですが…、 コード上で適当に、std::ios_base::Initと打ってください。そして、Initの上にカーソルを合わせて右クリックしてください。 すると、Initクラスが定義されているところへ飛びます。ここで、Initのコンストラクタとデストラクタの存在の有無を教えてください。
Re: iostreamについて ( No.10 )
名前:七篠 日時:2009/05/17 17:24

// CLASS Init class _CRTIMP Init { public: Init(); ~Init(); private: static int _Init_cnt; }; 宣言は見つかりましたが、中身は検索しても出てきませんでした。 std::ios_base::Initで調べたんですが、 ttp://www.23ch.info/test/read.cgi/tech/1184717430/ ここのレス番号131と症状が似ているようです。
Re: iostreamについて ( No.11 )
名前:七篠 日時:2009/05/17 17:48

解決しました! どうもMicrosoft Platform SDKのiostreamが干渉していたようです。 インクルードファイルから除外すれば通りました。 結局DXライブラリと全く関係ないミスで申し訳ありませんでした。 tkmakwins15さま、長々とお付き合いいただいてありがとうございました。

Page: 1 |