0

我一直在尝试从旧的 2.8.12 升级到 wxWidgets 2.9.4,但遇到了问题。我从命令行编译它没有错误,但是当我尝试在以前版本下运行良好的程序中使用它们时,我得到未解决的外部问题。我将它缩减为一个裸框架和 TextCtrl 对象,它仍然这样做(它与目前的示例代码之一基本相同)。

我尝试了以下命令来构建静态库:

  1. nmake -f makefile.vc SHARED=0 BUILD=release + nmake -f makefile.vc SHARED=0 BUILD=debug
  2. nmake -f makefile.vc SHARED=0 MONOLITHIC=0 BUILD=release + nmake -f makefile.vc SHARED=0 MONOLITHIC=0 BUILD=debug
  3. nmake -f makefile.vc SHARED=0 BUILD=release UNICODE=0 + nmake -f makefile.vc SHARED=0 BUILD=debug UNICODE=0
  4. nmake -f makefile.vc SHARED=0 BUILD=release UNICODE=0 MONOLITHIC=0 + nmake -f makefile.vc SHARED=0 BUILD=debug UNICODE=0 MONOLITHIC=0

请注意,我尝试将它们与推荐的 unicode 和不再支持的非 unicode 一起使用(相应地更改了 Configuration Properties->General 中的项目属性)。此外,我使用了 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 库(有一个 build/msw 文件夹,其中包含 VS2010 的解决方案文件),并在您的项目中设置与 wx 库项目相同的属性。

于 2013-01-22T19:52:37.467 回答
0

我也有这个问题。我通过更改以下设置解决了这个问题:

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

是的。

于 2013-02-06T22:06:00.997 回答