在http://www.spice-space.org/download.html可以下载到windows版本的virt viewer

virt-viewer-x86-0.5.7.msivirt-viewer-x64-0.5.7.msi是使用MingW编译出来的,源码就是使用virt-viewer-0.5.7.tar.gz

如果需要定制virt viewer,就需要从源码编译出可执行的二进制码,本文就是描述编译windows版virt viewer的过程。

MinGW

在使用MinGw编译virt viewer之前,我们先简单介绍一下MinGW。鉴于MinGw过于庞大,我们也只能点到为止。

MinGW是Minimalist GUN for Windows的缩写。MinGW提供了一套开发环境,用来开发Microsoft windows本地应用。

MinGW提供了一套完全开源的编程工具集,不需要依赖于第三方的C运行DLL,就可以开发Windows本地应用。当然MinGW还是依赖于microsoft提供的几个操作系统DLL,比如MSVCRT.DLL。

MinGW 编译器提供了对Microsoft C Runtime的以及一些语言特定runtimes的访问。MinGW的Minimalist,就体现在这里,MinGW没有尝试提供一个POSIX runtime 环境。

  1. <span style="font-size:10px;">Microsoft C Runtime
  2. C Runtime是windows平台的一个概念,一般来说CRT函数(C Runtime函数)就是标准的C语言函数。比如printf, scanf, strlen, fopen等函数就是属于CRT函数。
  3. 但是在windows下所有的CRT函数最终都转化为win32 API来执行的。windows内核本身,并没有提供对CRT的支持。
  4. </span>

由于MinGW是基于GNU的,自然可以在linux提供了一套交叉编译环境。有了MinGW,我们可以在linux下开发,编译,运行windows应用程序。

上面提到的virt-viewer-x86-0.5.7.msivirt-viewer-x64-0.5.7.msi 就是MinGW编译环境的产物

在安装完他们后,可以去安装目录看看,在我的机器上目录结构如下。

对于linux开发者来说,这个目录层次是不是似曾相识。

没错!安装目录中包含了执行文件,配置脚本,以及各种GNU的库(当然了,这些是windows下DLL,而不在是linux下的.so)

由于virt viewer使用了大量的GNU库,所以要想重新编译virt viewer,必须借助于MinGW。

准备开发环境

MinGW开发环境

在windows上搭建MinGW开发环境,可参考http://www.mingw.org/wiki/InstallationHOWTOforMinGW, windows下MinGW开发环境是官方支持的

这里我们只描述linux下MinGW开发环境的搭建。注意,由于linux MinGW交叉编译环境是distributors提供的,这些交叉工具链并不是MinGW.org直接提供的。

Linux发行版Fedora上提供了MinGW开发包,因此我们选择Fedora 19做为软件环境。

Fedora的MinGW有相当多的软件包,我们这里选择全部安装,总计700MB,好在今天网速快。

  1. # su
  2. # yum install mingw*
  3. # yum install intltool
  4. # yum install icoutils.i686

编译virt viewer

1. 下载virt-viewer源码

https://fedorahosted.org/released/virt-viewer/ 有很多virt_viewer的版本,这里我们使用virt-viewer-0.5.6.tar.gz

2. 解压

  1. # tar zxvf virt-viewer-0.5.76.tar.gz
  2. # cd virt-viewer-0.5.6

3. 首先执行MinGW的configure工具

  1. # mingw32-configure --with-gtk=2.0 --with-spice-gtk

由于上面准备MinGW 环境时,我们已经安装了绝大多数的库,所以一般来说这里不会失败,如果失败,按照提示使用yum安装即可。

在我的机器上显示如下

  1. configure: Configuration summary
  2. configure: =====================
  3. configure:
  4. configure:  Features:
  5. configure:
  6. configure:       Gtk: 2.0
  7. configure:
  8. configure:  Libraries:
  9. configure:
  10. configure:        GLIB2: -mms-bitfields -I/usr/i686-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/glib-2.0/include   -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lgthread-2.0 -lgmodule-2.0 -lglib-2.0 -lintl
  11. configure:
  12. configure:          GTK: -mms-bitfields -I/usr/i686-w64-mingw32/sys-root/mingw/include/gtk-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/gtk-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/atk-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/cairo -I/usr/i686-w64-mingw32/sys-root/mingw/include/gdk-pixbuf-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/pango-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/pixman-1 -I/usr/i686-w64-mingw32/sys-root/mingw/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/freetype2 -I/usr/i686-w64-mingw32/sys-root/mingw/include/libpng15 -I/usr/i686-w64-mingw32/sys-root/mingw/include/harfbuzz   -Wl,-luuid -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -limm32 -lshell32 -lole32 -latk-1.0 -lpangocairo-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangoft2-1.0 -lpangowin32-1.0 -lgdi32 -lfreetype -lfontconfig -lpango-1.0 -lm -lcairo -lgobject-2.0 -lglib-2.0 -lintl
  13. configure:
  14. configure:      GTK_VNC: -mms-bitfields -I/usr/i686-w64-mingw32/sys-root/mingw/include/gtk-vnc-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/gvnc-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/gtk-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/lib/gtk-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/atk-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/cairo -I/usr/i686-w64-mingw32/sys-root/mingw/include/gdk-pixbuf-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/pango-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/pixman-1 -I/usr/i686-w64-mingw32/sys-root/mingw/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/freetype2 -I/usr/i686-w64-mingw32/sys-root/mingw/include/libpng15 -I/usr/i686-w64-mingw32/sys-root/mingw/include/harfbuzz   -Wl,-luuid -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lgtk-vnc-1.0 -lgvnc-1.0 -lgtk-win32-2.0 -lgdk-win32-2.0 -limm32 -lshell32 -lole32 -latk-1.0 -lpangocairo-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangoft2-1.0 -lpangowin32-1.0 -lgdi32 -lfreetype -lfontconfig -lpango-1.0 -lm -lcairo -lgobject-2.0 -lglib-2.0 -lintl
  15. configure:
  16. configure:    SPICE_GTK: -mms-bitfields -I/usr/i686-w64-mingw32/sys-root/mingw/include/spice-client-gtk-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/gtk-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/spice-client-glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/gtk-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/atk-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/cairo -I/usr/i686-w64-mingw32/sys-root/mingw/include/gdk-pixbuf-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/pango-1.0 -I/usr/i686-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/pixman-1 -I/usr/i686-w64-mingw32/sys-root/mingw/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/freetype2 -I/usr/i686-w64-mingw32/sys-root/mingw/include/libpng15 -I/usr/i686-w64-mingw32/sys-root/mingw/include/harfbuzz -I/usr/i686-w64-mingw32/sys-root/mingw/include/spice-1   -Wl,-luuid -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lspice-client-gtk-2.0 -lgtk-win32-2.0 -lspice-client-glib-2.0 -lgdk-win32-2.0 -limm32 -lshell32 -lole32 -latk-1.0 -lpangocairo-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangoft2-1.0 -lpangowin32-1.0 -lgdi32 -lfreetype -lfontconfig -lpango-1.0 -lm -lcairo -lgobject-2.0 -lglib-2.0 -lintl
  17. configure:
  18. configure:      LIBXML2: -I/usr/i686-w64-mingw32/sys-root/mingw/include/libxml2   -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lxml2
  19. configure:
  20. configure:      LIBVIRT: -I/usr/i686-w64-mingw32/sys-root/mingw/include   -L/usr/i686-w64-mingw32/sys-root/mingw/lib -lvirt -lportablexdr -lintl
  21. configure:
  22. configure:        OVIRT:
  23. configure:

编译

  1. mingw32-make

编译过程也可能出现依赖的工具错误,下载需要的工具包即可解决

安装

  1. mingw32-make install

执行安装命令后,会把编译生成的文件拷贝到/usr/i686-w64-mingw32/sys-root/mingw下,文件的执行依赖于这个目录下的bin, etc, conf, lib 和share,我们需要把这几个目录的内容都拷贝到windows下。

这些目录下是MinGW windows应用程序基本运行环境,大部分并不是virt-viewer必须的,后面我们会把virt-viewer运行必须的文件列表列出来。

执行

  1. cd mingw
  2. cd bin
  3. remote-viewer.exe

即可看到GTK样式的remote viewer了

MingW编译virt-viewer的更多相关文章

  1. virt viewer Usbredir USB重定向

    编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的. virt view ...

  2. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  3. Fedora 11中用MinGW编译Windows的Qt4程序(在Linux系统下编译Windows的程序)

    Ubuntu下可以直接安装: sudo apt-get install mingw32 mingw32-binutils mingw32-runtime 安装后编译程序可以: i586-mingw32 ...

  4. Windows下MinGW编译Qt4

    还真不是吹,这个问题折磨我一天……前些天转载了一篇关于<Eclipse+Qt开发环境设置>和<Eclipse+MinGW+Qt开发环境设置>两片文章,里面讲述了QT的开源版本q ...

  5. VS2008编译器编译出来的文件比mingw编译的要几乎小一半

    为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然 ...

  6. 在Windows环境下使用MinGW编译Qt 4.8.6

    1.修改环境变量工具推荐:Rapid Environment Editor.官网:http://www.rapidee.com/ 修改前请先备份当前的环境变量.然后: (1)检查系统变量path,删除 ...

  7. 使用Mingw编译wxSqlite3-3.0.5

    最近在学习wxWidgets,而且官方也出了3.0版本,貌似还不错的样子,准备做个小程序来练手.中间需要用到数据库看到很多人推荐wxSqlite3就去下来看看,以下是我使用TDM-GCC 4.8.1( ...

  8. 利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用

    将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.d ...

  9. Windows7下使用mingw编译openssl

    Windows7下使用mingw编译openssl 首先参考这篇文章安装mingw/minsys: http://blog.csdn.net/ubuntu64fan/article/details/8 ...

随机推荐

  1. MATLAB曲线绘制

    一. 二维数据曲线图1.1 绘制 单根二维曲线plot 函数的基本调用 格式为:plot(x,y) 其中x和y为长度相同的向量,分别用于存储x坐标 和y坐标数据. 例1-1 在0≤x≤2p区间内,绘制 ...

  2. HDU 3308 线段树 最长连续上升子序列 单点更新 区间查询

    题意: T个测试数据 n个数 q个查询 n个数 ( 下标从0开始) Q u v 查询 [u, v ] 区间最长连续上升子序列 U u v 把u位置改成v #include<iostream> ...

  3. android bitmap out of memory总结、心得

    setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,这些函数在完成decode后,最终都是通过java层的creat ...

  4. topcoder srm 610 div2 250

    第一次做tc 的比赛,一点也不懂,虽然题目做出来了, 但是,也没有在比赛的时候提交成功.. 还有,感谢一宁对tc使用的讲解.. 贴一下代码..... #include <cstring> ...

  5. 函数buf_pool_get

    根据space ,offset 获取 buff pool的实例 下标 /**************************************************************** ...

  6. sql server 数据库 ' ' 附近有语法错误

    昨天做项目时候,遇到标题的问题,代码跟踪把sql 语句 复制出来在数据库执行不了, 然后重新写个一模一样的,然后在 赋值到代码中,还是同样的错误, 就是不知道哪里出现了错误,最后 把 sql 语句写成 ...

  7. LeetCode Contains Duplicate II (判断重复元素)

    题意:如果有两个相同的元素,它们之间的距离不超过k,那么返回true,否则false. 思路:用map记录每个出现过的最近的位置,扫一边序列即可.扫到一个元素就判断它在前面什么地方出现过.本题数据有点 ...

  8. Android 下压缩图片—微弱失真

    Android下压缩图片的方法: 大概能将3M左右的图片压缩到100K左右, 几乎不失真. 代码如下: import java.io.FileNotFoundException; import jav ...

  9. 【转】如何在IOS中使用3D UI - CALayer的透视投影

    原文网址:http://www.tairan.com/archives/2041/ 例子代码可以在 http://www.tairan.com/thread-3607-1-1.html 下载 iOS的 ...

  10. Android中FragmentPagerAdapter对Fragment的缓存(一)

    ViewPager + FragmentPagerAdapter,时我们经常使用的一对搭档,其实际应用的代码也非常简单,但是也有一些容易被忽略的地方,这次我们就来讨论下FragmentPagerAda ...