VS编译wxWidgets
准备工作##
- 下载wxWidgets源码包(官网),我用的是3.02版;
- 安装Visual Studio。我用的是VS 2015 RC;
编译源码##
- 解压wxWidgets的源码包,会得到一大堆文件。进入
build\msw
文件夹,这个文件夹内是专门为Visual Studio提供的工程文件。在里面能找到从VC7到V12的工程文件。但VS 2015应该是VC14。不用在意这些细节,直接打开wx_vc12.sln
,挑一个相对最新的。
- 打开之后VS会提示项目代码升级,直接确定。然后在解决方案资源管理器中选中所有项目,打开
属性
页。
先编译一个Debug版本的,所以配置
选Debug
。字符集
选Unicode
。这个选未设置
也可以,但一定要保证你的wxWidgets工程的设置和编译源码的设置是一致的。
编译过程中可能会出现“snprintf重定义”的错误:
fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration
这个博客给出了解决方案,即注释掉\src\tiff\libtiff\tif_config.h
中的宏 snprintf 的定义:
//#define snprintf _snprintf
再次编译,没有错误。编译出的结果在\lib\vc_lib
下。另外\build\msw\vc_mswud
下是VS生成的日志文件,挺占空间的,可以删。
Hello World##
开始测试我们编译出的东西能不能用:
新建一个空白的C++工程。在它的项目属性页里添加一些东西:
·配置属性->VC++目录->常规->包含目录 加上
X:\...\wxWidgets\include
X:\...\wxWidgets\include\msvc
·配置属性->VC++目录->常规->库目录 加上
X:\...\wxWidgets\lib\vc_lib
·配置属性->链接器->输入->附加依赖项 加上
wxbase30ud.lib wxmsw30ud_core.lib wxmsw30ud_gl.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib oleacc.lib
这一部分的依赖项并不是固定的,按需求来添加。wxbase30ud.lib
其中的30表示版本。添加一个空白cpp文件,贴上一段从官网上找到的Hello World代码。
运行结果图
// wxWidgets "Hello world" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
void OnHello(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE();
};
enum
{
ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Hello, MyFrame::OnHello)
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame("Hello World", wxPoint(50, 50), wxSize(450, 340));
frame->Show(true);
return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, wxID_ANY, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
"Help string shown in status bar for this menu item");
menuFile->AppendSeparator();
menuFile->Append(wxID_EXIT);
wxMenu *menuHelp = new wxMenu;
menuHelp->Append(wxID_ABOUT);
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, "&File");
menuBar->Append(menuHelp, "&Help");
SetMenuBar(menuBar);
CreateStatusBar();
SetStatusText("Welcome to wxWidgets!");
}
void MyFrame::OnExit(wxCommandEvent& event)
{
Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxMessageBox("This is a wxWidgets' Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION);
}
void MyFrame::OnHello(wxCommandEvent& event)
{
wxLogMessage("Hello world from wxWidgets!");
}
VS编译wxWidgets的更多相关文章
- MinGW编译wxWidgets中的问题及解决方法
其实网上wxWidgets编译相关的博文,都没写到关键点上,泛泛而谈——就写了执行几个命令,就万事大吉了! 维基百科上的这个页面讲解了编译中可能遇到的各种问题及解决办法.比较懒,不想翻译.wxWidg ...
- vs2008编译wxWidgets 2.8.12
用vs2008编译wxWidgets 2.8.12 FileZilla客户端源码3.5.3及以上版本依赖wxWidgets 2.8.12或更高版本,因此,编译FileZilla客户端首先需要编译wxW ...
- [转]MinGW编译wxWidgets问题
其实利用MinGW编译wxWidgets是一件挺简单的事情,但是最近在编译的时候遇到一些问题,并找到解决方案,因此在此分享一下个人经验.编译出错的原因是由于安装了MSYS的缘故. 错误信息类似于如 ...
- 编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行
编译wxWidgets —— windows.vc71.bcc32.MinGW与命令行 http://www.diybl.com/course/3_program/vc/vc_js/20071226/ ...
- Visual Studio 2015编译wxWidgets
宫指导说,换帅如换刀 程序员的编译器一换,基本套路必须都重练几次 使用wxWidgets并不难,但不能使用现有的库和工程配置文件,细节就必须理清楚 获取wxWidgets 官方的下载页面,下7z或zi ...
- 关于在windows下使用mingw并行编译wxwidgets时的错误
清理用的命令:mingw32-make -j4 -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 clean 2>nul ...
- 编译wxWidgets
打开x64 Native Tools Command Prompt for VS 2017 cd wxWidgets-2.9.5\build\msw nmake -f makefile.vc TARG ...
- wxWidgets编译安装gtk问题的解决办法
下面是google到的一篇博文.我在centos5.3中想安装amule,结果编译时,提示没找到wxWidgets退出了.只好又去下了wxWidgets,还是源码,需要编译.编译中出现和下面这位网友一 ...
- (转)wxWidgets 2.9.2svn(3.x)最小体积编译方法
官方论坛.网上记录的wxWidgets编译方法,会导致编译后的程序库非常大,原因在于对编译的方法选择不当.下面简单总结一下如何编译最新的SVN代码.下载最新源码(每日构建):http://biolpc ...
随机推荐
- hdu 3074 Multiply game(模板级线段树)
离机房关门还有十分钟,这点时间能干些什么?故作沉思地仰望星空,重新捋一下一天的学习进度,或者,砍掉一棵模板级线段树. 纯模板,就是把单点更新,区间求和改为单点更新,区间求积. 1A. #include ...
- [置顶] 安卓UI组件之ListView详解
ListView是很常见的一个UI组件,在许多App中都很常用,其意思就是可滚动的列表,使用ListView必须使用Adapter(适配器),常用的适配器友谊ArrayAdapter,SimpleAd ...
- C++中的异常
一,异常的推演 1.函数与异常 平时我们在函数中出现异常情况时通常通过return终止函数并返回一个值,然后在函数上层来获取值并判断是什么异常情况.因为函数是栈结构的,所以return的时候是通过栈结 ...
- 办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo
办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo QQ/微信171922772办理毕业证成绩单.真实使馆及教育部学历认证★诚 ...
- java中的instanceof
instanceof是Java.php的一个二元操作符(运算符),和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实 ...
- linux基础命令大全
编辑器 ed vi/vim (交互式) sed (非交互) vi/vim 的使用 1.命令模式 移动光标 方向键 hjkl H L M G 1G nG 复制行 yy nyy 粘贴 p 删除行 dd n ...
- Ubuntu创建、删除文件与目录
"~"代表了用户主目录,即/home/帐户名.所以"/home/jv/下载"="~/下载" 创建文件和目录(文件夹) touch filen ...
- 文档在线预览开源实现方案三:OpenOffice + PDFRenderer + js
之前的方案无法很好地解决异构平台及不同浏览器的兼容性问题,如方案一需要客户端浏览器支持flash而移动端浏览器无法支持这点,虽然移动端浏览器支持方案二,但是一些老版本的IE浏览器无法支持,例如IE8就 ...
- GIT 代码管理工具 SourceTree
什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict Torval ...
- ios之极光推送消息收到以后对消息的处理总结
当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下 2.APP处于后台挂起情况下 3. ...