宫指导说,换帅如换刀

程序员的编译器一换,基本套路必须都重练几次

使用wxWidgets并不难,但不能使用现有的库和工程配置文件,细节就必须理清楚

获取wxWidgets

官方的下载页面,下7z或zip文件均可

文件“wxWidgets根目录/docs/msw/install.txt”是编译说明文档,可以作为参考

添加环境变量WXWIN,值是wxWidgets根目录的路径。虽然不添加变量也可以编译,但很多wxWidgets插件的编译都依赖这个环境变量,因此最好加上。

wxWidgets根目录的路径不要含有空格

增加vs2015支持

vs2015影响编译的改动,主要是定义了snprintf,以及编译器版本升级到14。

需要对wxWidgets作如下修改,才能使用vs2015进行编译。

%WXWIN%\include\msvc\wx\setup.h,66行,增加版本支持

    #elif _MSC_VER == 1900
#define wxCOMPILER_PREFIX vc140

%WXWIN%\include\wx\compiler.h,56行,增加版本支持

#elif __VISUALC__ < 2000
#define __VISUALC14__

在下面三个文件中,找到snprintf的宏定义,注释掉

  •   %WXWIN%\src\tiff\libtiff\tif_config.h
  •   %WXWIN%\src\tiff\libtiff\tif_config.vc.h
  •   %WXWIN%\src\zlib\gzguts.h

编译库文件

运行“开始|所有程序|visual studio 2015|visual studio tools|VS2015 开发人员命令提示”

切换到%WXWIN%\build\msw

32位静态库DEBUG版

nmake /f makefile.vc

库文件生成在%WXWIN%\lib\vc_lib,文件名含d表示debug版

32位静态库RELEASE版

nmake /f makefile.vc BUILD=release

库文件生成在%WXWIN%\lib\vc_lib,文件名不含d与debug版区分

32位动态库DEBUG版

nmake /f makefile.vc SHARED=1

库文件生成在%WXWIN%\lib\vc_dll,文件名含d表示debug版

32位动态库RELEASE版

nmake /f makefile.vc BUILD=release SHARED=1

库文件生成在%WXWIN%\lib\vc_dll,文件名不含d与debug版区分

运行“开始|所有程序|visual studio 2015|visual studio tools|Windows Desktop Command Prompts|VS2015 x64 本机工具命令提示符”

切换到%WXWIN%\build\msw

64位静态库DEBUG版

nmake /f makefile.vc TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_lib,文件名含d表示debug版

64位静态库RELEASE版

nmake /f makefile.vc BUILD=release TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_lib,文件名不含d与debug版区分

64位动态库DEBUG版

nmake /f makefile.vc SHARED=1 TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_dll,文件名含d表示debug版

64位动态库RELEASE版

nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_dll,文件名不含d与debug版区分

“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!");
}

静态库DEBUG方案的编译

“工程属性|C/C++|常规|附加包含目录”,添加

%WXWIN%\include

“工程属性|链接器|常规|附加库目录”,添加

%WXWIN%\lib\vc_lib

“工程属性|链接器|输入|附加依赖项”,添加

wxbase30ud.lib
wxbase30ud_net.lib
wxbase30ud_xml.lib
wxexpatd.lib
wxjpegd.lib
wxmsw30ud_adv.lib
wxmsw30ud_aui.lib
wxmsw30ud_core.lib
wxmsw30ud_gl.lib
wxmsw30ud_html.lib
wxmsw30ud_media.lib
wxmsw30ud_propgrid.lib
wxmsw30ud_qa.lib
wxmsw30ud_ribbon.lib
wxmsw30ud_richtext.lib
wxmsw30ud_stc.lib
wxmsw30ud_webview.lib
wxmsw30ud_xrc.lib
wxpngd.lib
wxregexud.lib
wxscintillad.lib
wxtiffd.lib
wxzlibd.lib
winmm.lib
comctl32.lib
rpcrt4.lib
wsock32.lib
wininet.lib

推荐用这种方式添加依赖项,而不写#pragmma comment,方便切换不同方案,代码也美观

最后5个依赖项并不属于wxWidgets,别漏了

编译运行,成功~

静态库RELEASE方案的编译

附加库目录的路径不同,要修改

依赖库的名字不同,把d去掉

动态库方案的编译

“工程属性|C/C++|预处理器|预处理器定义”,添加

WXUSINGDLL

Visual Studio 2015编译wxWidgets的更多相关文章

  1. Visual Studio 2015 编译错误 File 的值+乱码的解决方法

    ======================================== VS2015调试项目时,会报莫名奇妙的错误,如下图所示: 程序编译,提示有错误:Visual Studio 2015 ...

  2. Visual Studio 2015编译安装配置QT5.5.1(含QTWEBKIT)

    尽管QT5.5.1和VisualStudio 2015都已经发布很久了,但是QT项目组视乎不会为QT5.5.1专门发布预编译的QT5.5.1 for windows(2015)版本的,也不会专门发布V ...

  3. 用Visual Studio 2015 编译张帆的第一个NT式驱动,并且成功安装到Windows XP里面!!!

    开发工具:Visual Studio 2015 企业版 目 标 机:Windows XP X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...

  4. 用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!!

    开发工具:Visual Studio 2015 企业版 目 标 机:Windows 10 X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...

  5. QT5.7.0在win10下使用visual studio 2015编译(目标平台 xp)

    环境:win10+vs2015+QT5.7.0 目标:编译出能在windows xp上运行的QT 通过baidu和bing找出来的结果没有一个能成功运行,大部分都能编译成功,并完美解决“exe不是有效 ...

  6. Visual Studio 2015 编译错误【错误 C4996 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s instead. 】的解决方案

    错误提示信息: 错误 C4996 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s inst ...

  7. Visual Studio 2015编译Lua 5.3.4遇到的坑

    被坑的不浅,遇到错误:" LNK1561:必须定义入口点",解决方案删除再建,步骤一遍一遍操作,还是报错.如下图所示: 首先,它必须要改成DLL或者LIB(动态/静态库),如果是应 ...

  8. 使用 Visual Studio 2015 编译 QT 工程

    简单进行一下几步就可以了 1.下载源代码 qt-everywhere-opensource-src-5.6.0-alpha.7z .解压到 D:\ToolKits\5.6.0\src 目录下2.网站 ...

  9. Visual Studio 2015下编译zmq项目下其他项目踩进的项目引用坑

    PS.在之前的一篇文章中介绍了如何用Visual Studio 2015编译zmq,在编译同解决方案中除了libzmq之外的项目例如inproc_thr时会报错误,具如下: Severity Code ...

随机推荐

  1. C#_02.13_基础三_.NET类基础

    C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...

  2. web 和 java 资源

    1.自己按照上面的网址和密码自己去下载都那些视频都是vip的视频现在下载免费  7-17JAVA开发搜索引擎自动提示[优效学院向天] 链接:http://pan.baidu.com/s/1bpEkfR ...

  3. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  4. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  5. IPAddress.Any 解决本地ip和服务器ip切换问题

    IPAddress.Any表示本机ip,换言之,如果服务器绑定此地址,则表示侦听本机所有ip对应的那个端口(本机可能有多个ip或只有一个ip)IPAddress.Any微软给出的解释是:Provide ...

  6. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop

    最近由于要使用Sqoop来到出数据到hdfs,可是发现Sqoop1.4.5跟hadoop2.X不兼容,需要对Sqoop1.4.5进行编译,编译的具体方法见:http://my.codeweblog.c ...

  7. java 使用CXF将wsdl文件生成客户端代码命令java调用第三方的webservice应用实例

    1.先下载cxf包https://download.csdn.net/download/suizhikuo/108112362.解压缩包,通过cmd命令进入到bin目录下(cd cxf\bin的路径) ...

  8. 具有相同名称 的类/接口已在使用。请使用类定制设置来解决此冲突。java调用第三方的webservice应用实例

    WSDLToJava Error: http://10.96.84.124:81/BTRPWebServiceForSMB/OnSMBOrderService.svc?xsd=xsd0 [0,0]: ...

  9. 第二天学习笔记:(MDN HTML学习、web安全策略与常见攻击、语义化)

    一:Web入门 1:web文件命名 在文件名中应使用连字符(-).搜索引擎把连字符当作一个词的分隔符, 但不会以这种方式处理下划线. 养成在文件夹和文件名中使用小写,并且使用短横线而不是空格来分隔的习 ...

  10. QGIS Server使用记录

    目录 0. 简述 1. 下载QGIS桌面64位版本 2. 下载安装QGIS Server程序 3. 下载安装Apache服务器 4.使用及问题处理 0. 简述 关于QGIS Server相关的文档很少 ...