0

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 "_D​​EBUG" /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 "_D​​EBUG" /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)
4

1 に答える 1

1

wxWidgets とそれを使用するアプリケーションは、同じバージョンのコンパイラでビルドする必要があります。MSVC のバージョンが異なると、互換性のない異なるバージョンの CRT が使用されるため、VC10 を使用してアプリケーションをビルドし、それをリンクできる可能性はまったくありません。 VC9 で構築された wxWidgets。

VC10 での wx 自体のビルドに関しては、VC9 プロジェクトをインポートするときに実際にいくつかの問題が発生することがあります。これが発生した場合 (私の知る限り、wx 2.9.4 プロジェクト ファイルについてはまだ報告されていません)、カスタム ビルド ルールをsetup.h手動でコピーするか、自分で手動で実行してください。

FWIW は、3.0 リリース (近日公開) で「ネイティブ」な VC10 および VC11 プロジェクトを提供したいと考えています。

于 2012-09-09T14:35:07.020 に答える