`
thecloud
  • 浏览: 872239 次
文章分类
社区版块
存档分类
最新评论

跨平台Windows下MinGW +MSYS +GTK+Eclipse+opencv环境搭建

 
阅读更多

首先声明一下,本篇内容在网上有一个原始版本,经过我亲自对照其内容在windows上搭建环境,发现有些内容已经过时,有些链接已经不存在,所以我根据原文的思路修改了一些内容,加入了一些新内容,同时对网上的各种资料进行了一番整理,再呈现给大家。最后感谢原文的作者。

Windows下MinGW +MSYS +GTK+Eclipse+OpenCV 环境搭建

一、相关软件的简单介绍

MinGW的全称叫Minimalist GNU for windows,是一套Windows环境下GNU编译组件的接口,通俗的可以说是Win上的gcc 。比起MinGW,也许那只企鹅CygWin更加著名一些,但事实上两者是完全不同的东西。CygWin在Win上模拟一套Linux环境,使用Win的存储系统,编译的却是Linux环境下的程序,和虚拟机比较相似;MinGW则是完全的编译出Windows环境下的程序,换句话说,通过MinGW编译出来的exe是可以直接在explorer下双击运行的。从移植的角度上说,使用MinGW才能真正将一个Linux程序移植到Win,而CygWin不能。

MinGW是gcc的windows实现,也就是一个编译器;可以在windows下写unix like的代码,即调用fork(),pthread()等unix类库,MinGW会把这些调用编译成对应的windows kernel32 调用,执行的时候不依赖MinGW,效率也比较高。一般大型程序需要MSYS辅助。

CygWin像一个平台,是让windows拥有unix like环境的软件,gcc是安装在GygWin的编译器CygWini的gcc环境和Unix的gcc环境可以划等号编译一个大型程序,光靠一个GCC是不够的,还需要有Autoconf等工具来配置项目,CygWin 就提供了这些工具。但是GygWin编译出来的程序要加入cygwin1.dll才能跑,cygwin1.dll把unix-like的函数调用转化成等价的windows调用,当然也可以通过 -mno-cgywin来依赖MinGW,就不用cygwin1.dll了。

MSYS的全称叫Minimal SYStem,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal 。这个比较好理解,其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。

GTK的全称叫GIMP Toolkit,是一套跨多种平台图形工具包,按LGPL许可协议发布的。虽然最初是为GIMP写的,但目前已发展为一个功能强大、设计灵活的一个通用图形库。特别是被GNOME选中使得GTK+广为流传,成为Linux下开发图形界面应用程序的主流开发工具之一,当然GTK+并不要求必须在Linux上,事实上,目前GTK+已经有了成功的windows版本。GTK虽然是用C语言写的,但是您可以使用你熟悉的语言来使用GTK,因为GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Perl, TOM, Ada95, Objective C, Free Pascal

Glade是GTK+程序界面的可见即可得工具,即介面产生器。开发者可将窗体构件作为画布,通过向画布添加界面构件设计程序界面。这种方式最大的优势在于设计的同时能直观地看到界面构件,并且可以随时调整界面的设计,设计界面如同画图一般。Glade所设计的界面以XML格式保存,因此界面和程序逻辑是完全分离的,使程序界面设计更为轻松。所以我们这些懒人,就不用再去为画面的设计烦脑,用 Glade 设计好画面,再用编辑器把程式码稍为修修减减就 OK 了。

Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。 2003年,Eclipse 3.0选择OSGi服务平台规范为运行时架构。 2007年6月,稳定版3.3发布。2008年6月发布代号为Ganymede的3.4版。2009年7月发布代号为GALILEO的3.5版。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

二、一步一步实现环境的搭建

1、 MinGW的安装过程:

在项目下载页:http://sourceforge.net/projects/mingw/files/

点击Download mingw-get-inst-20110316.exe (576.1 KB)链接下载Automated MinGW Installer

提示:安装过程中需要连网。

开始安装:

wps_clip_image-11032 wps_clip_image-5398

选择安装目录,不要选择文件夹有空格的目录,如“Program Files”,安装目录默认就行。

wps_clip_image-25246 wps_clip_image-27120

因为以后要要用到OpenCV,所以勾选“C++ Compiler”,同时选中MSYS Basic System 与 MinGW Developer Tookit .它会帮你自动下载和安装MSYS,非常方便。

wps_clip_image-3307

如图,自动下载组件。有时下载时间很长,我等了1个小时才下载完毕。这个命令行窗口不要关闭。

安装完毕后,打开“开始”->”程序”->MinGW->MinGW Shell,如图,这就是前面介绍的MSYS

在这里可以尝试一些linux命令。

wps_clip_image-7958

2、 GTK的安装:

Gtk for windows 下载网址:http://www.gtk.org/download-windows.html

点击里面的All-in-one bundles下载链接,就能一次下载开发Gtk大部分需要的东西,里面包含了运行时环境(Run-time)以及开发包(Developer Packages)

2.1.将下载的压缩包解压,比如解压到D:/gtk-win32.

2.2.确保你的系统里不存在其他版本的gtk,然后将D:/gtk-win32/bin添加的系统环境变量PATH中。

2.3.测试Gtk.

打开MSYS(MinGW Shell),输入如下命令:

pkg-config --cflags gtk+-2.0

这个命令用于获取gtk头文件信息等,如果前面步骤正确,Shell会打印出一些有用的信息.

wps_clip_image-17773

再输入gtk-demo,可运行gtk的一些示例代码。

wps_clip_image-4437

其实gtk的界面与你平常看到的windows的界面不太一样,如果想使用windows的界面主题,就在 etc/gtk-2.0 中新建一个gtkrc文件

在其中加入:

gtk-theme-name = "MS-Windows"

备注:确保系统里没有其他版本的gtk很重要,当时我的系统system32文件夹下有一个也叫libglib-2.0-0.dll的动态链接库文件,但是它已经损坏了,导致我即使把gtk里面的bin文件夹得完整路径加到系统变量的PATH,运行编译好的程序时仍然提示类似”g_ref在libglib-2.0-0.dll找不到”的提示。把原来的libglib-2.0-0.dll删除,再运行编译好的程序,看到了久违的GUI界面。

Glade for windows:

下载页:http://sourceforge.net/projects/gladewin32/

可在http://sourceforge.net/projects/gladewin32/files/glade-win32/3.6.1/下载最新版Glade3-3.6.1.exe

安装的时候,在Choose Components页,勾选中”libxml2”,(否则运行时会提示找不到libxml2的dll)去掉“GTK+2.16.0”因为我们之前已经安装了最新版本的GTK.

wps_clip_image-12423

3、 eclipse安装:

首先安装JDK,运行jdk-1_5_0_18-windows-i586-p.exe程序,默认下一步、下一步安装完成即可。

<?未完待续?>

接下来,我们就可进行实例开发了。

四、eclipse实例开发:

1、 HelloWold实例:

创建一个C++项目

wps_clip_image-19230

在Project name 输入名字;

wps_clip_image-20481

选择Project type->Executable->Hello World C++ Project

wps_clip_image-19411

点选finish,自动生成Hello World c++代码

wps_clip_image-24479

点击运行按钮wps_clip_image-23140

wps_clip_image-9160

运行输出!!!Hello World!!!

2、 GTK实例:

创建一个c Project (其实创建C++ project也不会有大问题)

wps_clip_image-17903

wps_clip_image-8752

输入代码并编译,

#include <gtk/gtk.h>

#include <stdio.h>

int main(int argc, char *argv[])

{

GtkWidget *win, *label;

gtk_set_locale();

gtk_init(&argc, &argv);

win = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_widget_set_usize(GTK_WIDGET(win), 200, 100);

gtk_window_set_title(GTK_WINDOW(win), "Test");

gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(gtk_exit), NULL);

label=gtk_label_new("Hello, GTK+/n");

gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(label));

gtk_widget_show_all(win);

gtk_main();

return 0;

}

wps_clip_image-19519

这是有些头文件和库还需要设置,有鼠标选择相关项目,点击右键,选择properties,如下图:

wps_clip_image-15566

wps_clip_image-23900

首先进入 C/C++ Build ->Settings-> GCC C Compiler->Miscellaneous

在Other flags中填入CMD命令'pkg-config --cflags gtk+-2.0'的内容;

(如-mms-bitfields -IC:/Gtk+/include/gtk-2.0 -IC:/Gtk+/lib/gtk-2.0/include -IC:/Gtk+/include/atk-1.0 -IC:/Gtk+/include/cairo -IC:/Gtk+/include/pango-1.0 -IC:/Gtk+/include/glib-2.0 -IC:/Gtk+/lib/glib-2.0/include -IC:/Gtk+/include/libpng12 -IC:/Gtk+/include/libglade-2.0)

其次进入MinGW C Linker ->Miscellaneous

在Linker flags中填入'pkg-config --libs gtk+-2.0'的(命令下的)内容;

(-LD:/MyPro/GTK/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl ),如下图

wps_clip_image-10678

分别在GCC C Compiler和 MinGW C Linker 中的Command line pattern中将${INPUTS} 调到${COMMAND}后面;

(如:${COMMAND} ${INPUTS} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX} ${OUTPUT}),如下图

wps_clip_image-27788

wps_clip_image-22155

配置完成后,编译->运行

wps_clip_image-17017

其实这样编译完后,在windows 下运行 gtk程序会有console窗口出现,非常烦人。

只要在MinGW C Linker->Miscellaneous的Linker flags:加上一个 –mwindows即可,如图:

wps_clip_image-31903

3、 Glade实例:

首先运行Glade程序,点击“开始->所有程序->Gtk+->Glade 3”

wps_clip_image-8528

选择相应的格式

wps_clip_image-4864

点击关闭按钮

在顶层部分,点击第一个窗口图标创建空白窗口(window1),鼠标指向时会有提示,之后在容器下边点击纵向盒容器VBOX(鼠标指向提示为垂直框),弹出窗口,选择要创建的盒数量,这里就以3 个为例,确定。见下图

wps_clip_image-21274

创建了一个有三个纵向盒容器的窗口后,在容器栏里边鼠标组件点击一下File 字样的按钮(鼠标提示菜单条),这时鼠标左键移动到创建的窗口区域时,左键指针就变成了一个“+”号下边附带点击过的File 按钮的图标。此时,鼠标左键点击在哪一个盒容器上,就在这个盒容器上创建了一个标准的菜单栏,当然要添加在最上边了,如下图

wps_clip_image-30208

然后我们要创建一个“文本视图”和1个“状态栏”,分别在“控件和现实”栏中找对应的控件按钮,点击并添加进盒容器中,界面会自动常规视窗样式调整各控件的所占空间比例,如下图

wps_clip_image-15263

wps_clip_image-6146

窗口已经设计完毕,点击保存,假设文件名为:test,,那么保存后生成的test.glade 文件,是一个XML 格式的文件,可以用记事本打开。接下利用Glade 设计好的窗口来编译程序,Glade2 的版本,有自动生成代码功能的,但很多人反对,因为其会让程序员变得懒惰,Glade3 的版本这个功能还真的取消了。

上边第一个步骤创建窗口时,默认窗口名称为window1,以及生成的test.glade 文件,编写如下代码:

#include <glade/glade.h>

#include <gtk/gtk.h>

int main(int argc,char **argv)

{

GladeXML *gxml;

GtkWidget *window;

gtk_init(&argc,&argv);

gxml=glade_xml_new("test.glade",NULL,NULL);

glade_xml_signal_autoconnect(gxml);

window=glade_xml_get_widget(gxml,"window1"); /* window1 是glade3 中窗口的名字 */

gtk_widget_show(window);

gtk_main();

return 0;

}

上述代码编辑保存后,保持程序与test.glade 放在同一目录下,编译后运行效果如下:

wps_clip_image-4747

另外我推荐一篇非常有名的glade3 的tutorial,如果你想学习glade3,一定要去看一下:

《GTK+ and Glade3 GUI Programming Tutorial》part1 ,part2,part3.

地址:

part1:http://blog.csdn.net/xbwee/archive/2009/03/28/4032652.aspx
part2:http://blog.csdn.net/xbwee/archive/2009/03/28/4032815.aspx
part3:http://blog.csdn.net/xbwee/archive/2009/03/29/4034314.aspx

适合用户:
1、想了解glade3设置界面。
2、想了解gtk+编程。
3、想了解pygtk编程。

继续,下面讲windows 下opencv 在eclipse编译环境的搭建:

中文opencv主页:http://www.opencv.org.cn/ 里面有opencv的介绍,下载,文档等资源。

opencv中文论坛:http://www.opencv.org.cn/forum/

Opencv下载地址:

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

点击安装下载的OpenCV for win32,过程很简单。

但有一点要注意,就是根据安装程序的提示选择将OpenCV加入到系统变量PATH中,否则,你必须手动将”Opencv安装目录/bin”加入到系统Path变量.如图:

wps_clip_image-14471

现在启动Eclipse ,在你的project上点右键,选中Properties.

wps_clip_image-18510

进入"C/C++ Build"->"Settings"->"Tool Settings"

在"GCC C++ Complier"->"Includes"中,把Opencv的头文件目录“Opencv安装目录/include/opencv”加入到Include paths (-I):中。(Opencv版本不同,头文件include目录稍有差别).

wps_clip_image-27387

在" MinGW Linker "-> "Libraries"中把以下内容加入到Libraries (-l)里面:

· cv120

· cvaux120

· cxcore120

· highgui120

· ml120

后面的数字因版本不同而有差异,例如Opencv1.20为cv120,Opencv2.0为cv200.具体是什么,可以打开Opencv安装目录下的lib文件夹查看。在大多数project中,你只需要加入cv120和highgui120即可。

最后,在Library search path (-L)中加入:

“Opencv安装目录/lib”

【未完待续,最后加入一个GTK+Opencv实例代码】

Reference:

1.Setting up OpenCV in Eclipse on Windows
2. Eclipse+Qt+OpenCV在Windows下的使用经验

3.GTK+ and Glade3 GUI Programming Tutorial [请翻过那堵墙]

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics