wxWidgets スタティック ライブラリを使用して VC++ 2010 で適切にコンパイルおよびリンクする wxWidgets プログラムを取得できません。VC++ 2008 では問題ありません。(WxWidgets には vc++ 2008 プロジェクト ファイルが同梱されています。)
wxWidgets に付属の「最小限の」サンプル プログラムをコンパイルして実行しました。GUIのハローワールドです。問題ない。VC++ 2010 を使用して .vsproj を .vsxproj に変換し、VC++ 2010 でコンパイルおよびリンクしようとしました。問題。
VC++ 2010 への変換を実行して、minimal.vsxproj を作成する以外には何も変更していません。
wxWidgets ライブラリの STL wchar_t 文字列に関係する多くのリンカー警告とエラーが発生しました。これが私が起こっていると思うことです。wxWidgets コードには、プリプロセッサ シンボルに基づいて __declspec(import) を選択するかどうかを選択する #ifdefs が必要だと思います。VC++ 2010 がプロジェクトを変換したとき、シンボルが wxWidgets をだますものに変更されたに違いありません。もしそうなら、バグはどちらかの場所にある可能性があります.wxWidgetsがプリプロセッサ定義について無効な仮定を行っているか、VC++ 2010変換がそれらを台無しにしています. プロジェクト内の単独の .cpp ファイルをコンパイルするためのコマンド ラインは、予想以上に異なっています。
2008 コマンドライン
/Od /I ".....\lib\vc_lib\mswud" /I ".....\include" /I "." /I ".....\samples" /D "WIN32" /D "_DEBUG" /D "_CRT_SECURE_NO_DEPRECATE=1" /D "_CRT_NON_CONFORMING_SWPRINTFS=1" /D "_SCL_SECURE_NO_WARNINGS=1" /D " WXMSW " /D " _UNICODE" /D "_WINDOWS" /D "NOPCH" /D "UNICODE" /FD /EHsc /RTC1 /MDd /Fo"vc_mswud\minimal\" /Fd"vc_mswud\minimal.pdb" /W4 /nologo /c /Zi /TP /errorReport:プロンプト /MP
2010 コマンドライン
/I".....\lib\vc_lib\mswud" /I".....\include" /I"." /I".....\samples" /Zi /nologo /W4 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CRT_SECURE_NO_DEPRECATE=1" /D "_CRT_NON_CONFORMING_SWPRINTFS=1" / D "_SCL_SECURE_NO_WARNINGS=1" /D " WXMSW " /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope / GR /Fp"vc_mswud\minimal\minimal.pch" /Fa"vc_mswud\minimal\" /Fo"vc_mswud\minimal\" /Fd"vc_mswud\minimal.pdb" /Gd /analyze- /errorReport:queue
例 2010 の警告とエラー
1>wxbase29ud.lib(ipcbase.obj) : warning LNK4049: locally defined symbol ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ (public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::~basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >(void)) imported
1>wxbase29ud.lib(mimecmn.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > & __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::assign(class std::_String_const_iterator<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::_String_const_iterator<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" (__imp_?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z)