如何编译wxWidgets示例程序

如何编译wxWidgets示例程序,第1张

wxWidgets

wxWidgets是一个程序开发框架/库, 允许你在Windows、Mac、Linux中使用相同的代码跨平台开发。它主要用C++写成,但也可以与其他语言绑定比如Python、Perl、Ruby。

本教程中我将向你展示如何在基于Debian的linux中如Ubuntu和Linux Mint中编译wxwidgets 3.0+。

从源码编译wxWidgets并不困难,仅仅需要几分钟。库可以按不同的方式来编译,比如静态或者动态库。

1. 下载 wxWidgets

第一步你需要从wxwidgets.org下载wxWidgets源码文件。

做完后,解压到目录。

2. 设置编译环境

要编译wxwidgets,我们需要一些工具包括C++编译器,在Linux上是g++。所有这些可以通过apt-get工具从仓库中安装。

我们还需要wxWidgets依赖的GTK开发库。

$ sudo apt-get install libgtk-3-dev build-essential checkinstall

这个叫做checkinstall的工具允许我们为wxwidgets创建一个安装包,这样之后就可以轻松的使用包管理器来卸载。

3. 编译 wxWidgets

进入到wxWidgets解压后的目录。为了保持清洁,创建一个编译用的目录。

$ mkdir gtk-build

$ cd gtk-build/

现在运行configure和make命令。每个将花费一些时间来完成。

$ ../configure --disable-shared --enable-unicode

$ make

"--disable-shared"选项将会编译静态库而不是动态库。

make命令完成后,编译就成功了。是时候安装wxWidgets到正确的目录。

更多信息请参考install.txt和readme.txt,这可在wxwidgets中的/docs/gtk/目录下找到。

4. 安装 checkinstall

现在我们不使用"make install"命令,我们使用checkinstall命令来创建一个wxwidgets的deb安装包。运行命令:

$ sudo checkinstall

checkinstall会询问几个问题,请保证在提问后提供一个版本号,否则将会失败。

完成这一切后,wxWidgets就安装好了,deb文件也会创建在相同的目录下。

5. 追踪安装的文件

如果你想要检查文件安装的位置,使用dpkg命令后面跟上checkinstall提供的包名。

$ dpkg -L package_name

/.

/usr

/usr/local

/usr/local/lib

/usr/local/lib/libwx_baseu-3.0.a

/usr/local/lib/libwx_gtk3u_propgrid-3.0.a

/usr/local/lib/libwx_gtk3u_html-3.0.a

/usr/local/lib/libwxscintilla-3.0.a

/usr/local/lib/libwx_gtk3u_ribbon-3.0.a

/usr/local/lib/libwx_gtk3u_stc-3.0.a

/usr/local/lib/libwx_gtk3u_qa-3.0.a

/usr/local/lib/libwx_baseu_net-3.0.a

/usr/local/lib/libwxtiff-3.0.a

6. 编译示例

编译wxWidgets完成后就可以马上编译示例程序了。在相同的目录下,一个新的sample目录已经创建了。

进入它并运行下面的命令

$ compile samples

$ cd samples/

$ make

make命令完成后,进入sample 子目录,这里就有一个可以马上运行的Demo程序了。

7. 编译你的第一个程序

你完成编译demo程序后,可以写你自己的程序来编译了。这个也很简单。

假设你用的是C++,这样的话你还可以使用编辑器的高亮特性。比如gedit、kate、kwrite等等。或者用全功能的IDE像Geany、Codelite、Codeblocks等等。

然而你的第一个程序只需要用一个文本编辑器来快速完成。

如下:

#includewx.h>

classSimple:public wxFrame

{

public:

Simple(const wxString&title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250,150))

{

Centre()

}

}

classMyApp:public wxApp

{

public:

boolOnInit()

{

Simple*simple =newSimple(wxT("Simple"))

simple->Show(true)

returntrue

}

}

wxIMPLEMENT_APP(MyApp)

现在保存并用下面的命令编译。

# compile

$ g++ basic.cpp `wx-config --cxxflags --libs std`-o program

# run

$ ./program

首先,你要编译wxwidgets,生成静态的wx库

其次,在codeblocks里使用wx向导建立wx工程的时候,在选择库设定的时候,不要勾选使用wxWidget dll选项即可,默认就会使用静态库链接

codeblocks,wx开发有问题,欢迎到百度codeblocks贴吧找我

内存不能为read或者written的错误,一般而言是越界非法访问的问题。

而且我觉得吧,编译的问题和用哪个IDE是没关系的,关键在你使用的编译器和库版本。检查2.8的bug说明和你所使用的库的版本编译说明。如果还是无法解决,那么用内存检测工具检查吧。

提示:你可以重点看看使用了wx内置数据结构的地方,和stl有些差别,容易造成问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12169267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存