MingW编译virt-viewer

简介: 在http://www.spice-space.org/download.html可以下载到windows版本的virt viewer virt-viewer-x86-0.5.7.msi和virt-viewer-x64-0.5.7.msi是使用MingW编译出来的,源码就是使用virt-viewer-0.5.7.tar.gz 如果需要定制virt viewer,就需要从源码编译出可执行的二进制码,本文就是描述编译windows版virt viewer的过程。

在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 环境。

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  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,好在今天网速快。

[cpp]  view plaincopy在CODE上查看代码片派生到我的代码片
  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. 解压

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  1. # tar zxvf virt-viewer-0.5.76.tar.gz  
  2. # cd virt-viewer-0.5.6  

3. 首先执行MinGW的configure工具

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  1. # mingw32-configure --with-gtk=2.0 --with-spice-gtk  

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

在我的机器上显示如下

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  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:   

 

编译

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  1. mingw32-make  

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

 

安装

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  1. mingw32-make install  

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

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

 

执行

[html]  view plaincopy在CODE上查看代码片派生到我的代码片
  1. cd mingw  
  2. cd bin  
  3. remote-viewer.exe  

即可看到GTK样式的remote viewer了

目录
相关文章
|
Linux
CentOS7下对非LVM类型的根分区进行扩容
CentOS7下对非LVM类型的根分区进行扩容
1077 0
CentOS7下对非LVM类型的根分区进行扩容
|
3月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
945 2
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
|
新零售 前端开发 JavaScript
盒马跨端设计系统 ReX Design For OS
6 个月前,在 D2 前端技术论上我们向社区分享了《盒马中后台跨端方案》,详细介绍了我们在基于盒马实体零售数字化业务场景中,面向盒马营运数字化系统构建的跨端设计系统——ReX Design For OS。6 个月来,在开发资源极度紧张的状态下,我们持续建设和打磨,今天我们很高兴的告诉大家我们已经将项目的主要代码开源到了 Github,并发布了 beta 版本。
盒马跨端设计系统 ReX Design For OS
|
6月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
335 1
|
Ubuntu NoSQL Linux
在Ubuntu上用Qemu模拟ARM版本的Fedora39
在Ubuntu上用Qemu模拟ARM版本的Fedora39
|
存储 Prometheus 索引
日志系统新贵Loki,确实比笨重的ELK轻
日志系统新贵Loki,确实比笨重的ELK轻
464 0
|
存储 安全 Java
【SSO-CAS部署】安装部署单点登录组件CAS(5.3.x版本)
【SSO-CAS部署】安装部署单点登录组件CAS(5.3.x版本)
1405 0
【SSO-CAS部署】安装部署单点登录组件CAS(5.3.x版本)
|
弹性计算 安全 关系型数据库
rds安全组规则
云数据库RDS的安全组规则是虚拟防火墙,用于控制网络访问权限,确保数据库安全。配置要点包括:指定RDS实例的安全组,设定入方向规则(如源IP、协议和端口),考虑默认规则的开放程度。根据场景,同组内外的ECS实例需不同配置。管理员应合理规划规则,确保业务需求与安全性平衡,并定期审计更新。
391 3
|
Go
panic: concurrent write to websocket connection【golang、websocket】
panic: concurrent write to websocket connection【golang、websocket】
448 0
|
JavaScript 前端开发 程序员
明确了!国家发布程序员和搬砖民工一样,都是农民工!
前几天我们发现,人社局官网发布了一则报告,显示软件开发和信息技术服务业都属于新生农工,不只是码农,所有在互联网工作者(户籍在老家的)都属于民工。