vs2005下编译wxWidgets

一、wx库简介
          跨平台GUI库。

          官方网站:http://www.wxwidgets.org/
          Wiki:http://wiki.wxwidgets.org/Main_Page


二、VS + Win32 环境编译

目标库版本: 2.8.8

编译平台: WinXP + VS2005

编译类型:静态库/动态库 + 未设置字符集 + Debug

编译目标平台: Win32

一,安装wxWidgets后,在目录D:\wxWidgets-2.8.8\build\msw\下,存在wx.dsw和wx_dll.dsw两个文件,无论先编译哪一个文件,都出现的错误,虽然浅显,无奈天资确实愚钝,绞尽脑汁也想不出解决的办法。找资料无数,终于在这位仁兄的博客中找到答案http://hi.baidu.com/lorryboy/blog/item/fb733410f6163477ca80c4f5.html,在此拜谢。解决办法:选择批生成,

这里只勾去所有项目的debug选项,生成。

编译完之后,在目录 D:\wxWidgets-2.8.8\lib\ 会有产生一个目 录:vc_lib 是静态库的目录,默认编译有 17 个静态。在 D:\wxWidgets-2.8.8\lib\vc_lib 中有 mswd 目 录,里面含有 Debug 版的 setup.h。
注意到UNICODE 、组合条件编译生成的文件和目录名。
静态库编译到 D:\wxWidgets-2.8.8\lib\vc_lib 目录中。

二,创建 wxWidgets 项目

创建一个 Win32 Application 的空项目,Proejct->Settings (Alt+F7) 进入项目设置
1. C/C++选项卡->Code Generation -> use run-time library 设置为: Debug MutilThread DLL
2. C/C++选项卡-> PreProcessor -> PreProcessor Definitions 设置加上 __WXMSW__,__WXDEBUG__ ,如果是 Release 版,则只需加上 __WXMSW__。
3. C/C++ 选项卡-> PreProcessor -> Additional include directories 设置 为 D:\wxWidgets-2.8.8\include,D:\wxWidgets-2.8.8\lib\vc_lib \mswd,   这是设置附加 Include 路径。
4. Link 选项卡-> Input -> Object/library modules 设置加上 wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib

wxzlibd.lib wxregexd.lib wxexpatd.lib 这些 Lib(没有这四 个 lib comctl32.lib rpcrt4.lib winmm.lib wsock32.lib 的话请加上,关键是前两个)。如果要使 用 wxODBC 就加上 wxbase28d_odbc.lib。
5. Link 选项卡-> Input -> Addtional library path 设置为: D:\wxWidgets-2.8.8\lib\vc_lib。

注意:编译成不同版的执行代码应填入相应的 Additional include directories 和 Addtional library path。
编译成依赖 DLL 的执行文件还需要加上预处理指令 WXUSINGDLL
用UNICODE 编译则需要加上预处理指令 _UNICODE
还有一种 Universal 编译,要加上预处理指令 __WXUNIVERSAL__

这样一个普通的WxWdigets项目就设置好了.

我们测试 WxWidgets 自带的例子 minimal。新建一个 minimal.cpp 文件,内容同 D:\wxWidgets-2.8.8\samples\minimal\minimal.cpp,编译,出错啦, 报如下错误:

1>minimal.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall wxApp::Initialize(int &,wchar_t * *)" (?Initialize@wxApp@@UAE_NAAHPAPA_W@Z)
1>minimal.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall wxAppConsole::OnAssertFailure(wchar_t const *,int,wchar_t const *,wchar_t const *,wchar_t const *)" (?OnAssertFailure@wxAppConsole@@UAEXPB_WH000@Z)
1>minimal.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall wxAppConsole::OnAssert(wchar_t const *,int,wchar_t const *,wchar_t const *)" (?OnAssert@wxAppConsole@@UAEXPB_WH00@Z)
1>minimal.obj : error LNK2019: 无法解析的外部符号 "protected: void __thiscall wxStringBase::InitWith(wchar_t const *,unsigned int,unsigned int)" (?InitWith@wxStringBase@@IAEXPB_WII@Z),该符号在函数 "public: __thiscall wxStringBase::wxStringBase(wchar_t const *)" (??0wxStringBase@@QAE@PB_W@Z) 中被引用
1>minimal.obj : error LNK2001: 无法解析的外部符号 "wchar_t const * const wxStatusLineNameStr" (?wxStatusLineNameStr@@3QB_WB)
1>minimal.obj : error LNK2001: 无法解析的外部符号 "wchar_t const * const wxFrameNameStr" (?wxFrameNameStr@@3QB_WB)
1>minimal.obj : error LNK2019: 无法解析的外部符号 "void __cdecl wxOnAssert(wchar_t const *,int,char const *,wchar_t const *,wchar_t const *)" (?wxOnAssert@@YAXPB_WHPBD00@Z),该符号在函数 "public: __thiscall wxStringBase::wxStringBase(class wxStringBase const &)" (??0wxStringBase@@QAE@ABV0@@Z) 中被引用
1>minimal.obj : error LNK2001: 无法解析的外部符号 "wchar_t const * const wxEmptyString" (?wxEmptyString@@3PB_WB)
1>minimal.obj : error LNK2019: 无法解析的外部符号 "public: static class wxString __cdecl wxString::Format(wchar_t const *,...)" (?Format@wxString@@SA?AV1@PB_WZZ),该符号在函数 "public: void __thiscall MyFrame::OnAbout(class wxCommandEvent &)" (?OnAbout@MyFrame@@QAEXAAVwxCommandEvent@@@Z) 中被引用
1>F:\wxHello\Debug\wxHello.exe : fatal error LNK1120: 9 个无法解析的外部命令

排查lib编译选项和wxHello编译选项,原因是wx_dll编译时 “属性--常规--字符集”为“未设置”,而wxHello为“使用 Unicode 字符集”,把wxHello该选项该成未设置,编译,成功,运行,第一个wxwidget界面出现。使用dll要注意dll工程选项和导入dll工程选项编译条件的一致性,要不会出现很多莫名奇妙的错误,由此可见很多编程细节往往会成为大问题,这也就是经验的重要性,值得借鉴。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值