0

古い 2.8.12 から wxWidgets 2.9.4 にアップグレードしようとしていて、問題が発生しました。コマンドラインからエラーなしでコンパイルしましたが、以前のバージョンで問題なく動作していたプログラムでそれらを使用しようとすると、未解決の外部が発生します。むき出しのフレームと TextCtrl オブジェクトだけに切り詰めましたが、これはまだ実行されています (現時点では、サンプル コードの 1 つと基本的に同じです)。

次のコマンドを試して、静的ライブラリを構築しました。

  1. nmake -f makefile.vc 共有=0 ビルド=リリース + nmake -f makefile.vc 共有=0 ビルド=デバッグ
  2. nmake -f makefile.vc 共有=0 モノリシック=0 ビルド=リリース + nmake -f makefile.vc 共有=0 モノリシック=0 ビルド=デバッグ
  3. nmake -f makefile.vc SHARED=0 BUILD=リリース UNICODE=0 + nmake -f makefile.vc SHARED=0 BUILD=debug UNICODE=0
  4. nmake -f makefile.vc SHARED=0 BUILD=リリース UNICODE=0 MONOLITHIC=0 + nmake -f makefile.vc SHARED=0 BUILD=debug UNICODE=0 MONOLITHIC=0

推奨されるユニコードとサポートされなくなった非ユニコードの両方でそれらを使用しようとしたことに注意してください(それに応じて構成プロパティ->一般のプロジェクトプロパティを変更しました)。また、wxWidgets マニュアルで推奨されているように、マルチスレッド DLL の /MD および /MDd リンクを使用しました。

編集: \MT と \MTd も使用してみましたが、同じ効果です。

上記のすべてから、アプリケーションをコンパイルするときに、以下にリストされている同じリンカ エラーが発生します。アイデアが尽きてしまったのでどうすればいいか教えてください...

さらに、最後の手段として、../build/msw フォルダーから変換された MSVS プロジェクトを使用して全体をビルドしましたが、同じ結果が得られました。

デバッグコンパイル

1>hworld.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall wxApp::Initialize(int &,unsigned short * *)" (?Initialize@wxApp@@UAE_NAAHPAPAG@Z)
1>hworld.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall wxAppConsoleBase::OnAssertFailure(unsigned short const *,int,unsigned short const *,unsigned short const *,unsigned short const *)" (?OnAssertFailure@wxAppConsoleBase@@UAEXPBGH000@Z)
1>hworld.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall wxAppConsoleBase::OnAssert(unsigned short const *,int,unsigned short const *,unsigned short const *)" (?OnAssert@wxAppConsoleBase@@UAEXPBGH00@Z)
1>hworld.obj : error LNK2001: unresolved external symbol "unsigned short const * const wxEmptyString" (?wxEmptyString@@3PBGB)
1>hworld.obj : error LNK2019: unresolved external symbol "private: static struct wxString::SubstrBufFromType<class wxScopedCharTypeBuffer<unsigned short> > __cdecl wxString::ConvertStr(char const *,unsigned int,class wxMBConv const &)" (?ConvertStr@wxString@@CA?AU?$SubstrBufFromType@V?$wxScopedCharTypeBuffer@G@@@1@PBDIABVwxMBConv@@@Z) referenced in function "private: static class wxScopedCharTypeBuffer<unsigned short> __cdecl wxString::ImplStr(char const *,class wxMBConv const &)" (?ImplStr@wxString@@CA?AV?$wxScopedCharTypeBuffer@G@@PBDABVwxMBConv@@@Z)
1>hworld.obj : error LNK2019: unresolved external symbol "void __cdecl wxOnAssert(char const *,int,char const *,char const *,unsigned short const *)" (?wxOnAssert@@YAXPBDH00PBG@Z) referenced in function "public: void __thiscall wxControlContainerBase::SetContainerWindow(class wxWindow *)" (?SetContainerWindow@wxControlContainerBase@@QAEXPAVwxWindow@@@Z)
1>wxpngd.lib(wxpng_pngread.obj) : error LNK2019: unresolved external symbol _inflateInit_ referenced in function _png_create_read_struct_2
1>wxpngd.lib(wxpng_pngread.obj) : error LNK2019: unresolved external symbol _inflate referenced in function _png_read_row
1>wxpngd.lib(wxpng_pngrutil.obj) : error LNK2001: unresolved external symbol _inflate
1>wxpngd.lib(wxpng_pngread.obj) : error LNK2019: unresolved external symbol _inflateEnd referenced in function _png_read_destroy
1>wxpngd.lib(wxpng_png.obj) : error LNK2019: unresolved external symbol _crc32 referenced in function _png_reset_crc
1>wxpngd.lib(wxpng_png.obj) : error LNK2019: unresolved external symbol _inflateReset referenced in function _png_reset_zstream
1>wxpngd.lib(wxpng_pngrutil.obj) : error LNK2001: unresolved external symbol _inflateReset
1>wxpngd.lib(wxpng_pngwrite.obj) : error LNK2019: unresolved external symbol _deflate referenced in function _png_write_flush
1>wxpngd.lib(wxpng_pngwutil.obj) : error LNK2001: unresolved external symbol _deflate
1>wxpngd.lib(wxpng_pngwrite.obj) : error LNK2019: unresolved external symbol _deflateEnd referenced in function _png_write_destroy
1>wxpngd.lib(wxpng_pngwutil.obj) : error LNK2001: unresolved external symbol _deflateEnd
1>wxpngd.lib(wxpng_pngwutil.obj) : error LNK2019: unresolved external symbol _deflateInit2_ referenced in function _png_zlib_claim
1>wxpngd.lib(wxpng_pngwutil.obj) : error LNK2019: unresolved external symbol _deflateReset referenced in function _png_zlib_release

リリースコンパイル

1>wxpng.lib(wxpng_png.obj): エラー LNK2001: 未解決の外部シンボル _crc32 1>wxpng.lib(wxpng_png.obj): エラー LNK2001: 未解決の外部シンボル _inflateReset 1>wxpng.lib(wxpng_pngrutil.obj): エラー LNK2001:未解決の外部シンボル _inflateReset 1>wxpng.lib(wxpng_pngread.obj): エラー LNK2001: 未解決の外部シンボルinflateInit 1>wxpng.lib(wxpng_pngread.obj): エラー LNK2001: 未解決の外部シンボル _inflate 1>wxpng.lib(wxpng_pngrutil.obj): エラー LNK2001: 未解決の外部シンボル _inflate 1>wxpng.lib(wxpng_pngread.obj): エラー LNK2001:未解決の外部シンボル _inflateEnd 1>wxpng.lib(wxpng_pngwrite.obj) : エラー LNK2001: 未解決の外部シンボル _deflate 1>wxpng.lib(wxpng_pngwutil.obj) : エラー LNK2001: 未解決の外部シンボル _deflate 1>wxpng.lib(wxpng_pngwrite.obj) : エラー LNK2001: 未解決の外部シンボル _deflateEnd 1>wxpng.lib(wxpng_pngwutil.obj) : エラー LNK2001: 未解決の外部シンボル _deflateEnd 1>wxpng.lib(wxpng_pngwutil.obj) : エラー LNK2001: 未解決の外部シンボルdeflateInit2 1>wxpng.lib(wxpng_pngwutil.obj): エラー LNK2001: 未解決の外部シンボル _deflateReset 1>MSVCRT.lib(crtexe.obj): エラー LNK2001: 未解決の外部シンボル _main

4

3 に答える 3

1

libpngから発生するすべてのエラーは、とリンクしていないことが原因wxzlib[d].libです。プロジェクト内のライブラリのリストに追加するだけです。または、推奨される方法を使用してMSVCでwxWidgetsプロジェクトを構築-I$(WXWIN)/include/msvcし、コンパイラヘッダーファイルの検索パスの前に自動リンクを使用します。

残りのエラー(それ自体が疑わしいデバッグビルドでのみ発生します)は、ANSIビルドとUnicodeビルドの不一致が原因です。いずれかの時点ですべてのバージョンをビルドしたように見えるため、最終的にどのバージョンを使用するかはわかりませんが、デフォルトのビルドを使用する場合は、プロジェクトオプションで定義する必要が_UNICODEあります。UNICODE

最後に、将来このようなビルドの不一致を回避するには、将来のビルドごとにnmake -f makefile.vc clean一意を使用して、異なるビルドディレクトリを使用するか使用します。COMPILER_PREFIXこれは実際にはロケット科学ではありません。一度に多くのことを行うことで混乱を避ける必要があります。幸運を!

于 2013-01-23T12:24:45.413 に答える
0

プロジェクトの設定に移動し、それに応じて General -> Character Set プロパティを変更します。UNICODE=0 (推奨値は 1) で wx ライブラリをコンパイルした場合は、Multi-Byte Character set. UNICODE=1 でコンパイルした場合、そのプロパティをUnicode

ランタイム ライブラリについては、SHARED=0 でコンパイルした場合、プロジェクト設定で C++ -> コード生成 -> デバッグおよびリリース ビルド用の「マルチスレッド デバッグ」および「マルチスレッド」でランタイム ライブラリ プロパティを使用する必要があります。によると。

最も簡単な方法は、Visual Studio から wxWidgets ライブラリをビルドし (VS2010 用のソリューション ファイルを含む build/msw フォルダーがあります)、プロジェクトで wx ライブラリ プロジェクトと同じプロパティを設定することです。

于 2013-01-22T19:52:37.467 に答える
0

私もこの問題を抱えていました。次の設定を変更して解決しました。

 C/C++ | Language | Treat WChar_t as built in type

はい。

于 2013-02-06T22:06:00.997 に答える