版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/49472027

(一):Winelib介绍

1:什么是winelib

Winelib是一个开发工具套件,他允许你能够在Unix中编译你的Windows应用程序。

大多数Winelib代码是由一些win32 API实现组成的。幸运的是,这一部分是在Wine中百分百分享的。其他的包括窗口兼容头文件和一些工具,如资源编译器(甚至这些是在wine编译的时候使用)。

幸亏有上面介绍的这些库和工具,Winelib才能够支持大多数的C和C++源码,资源和信息文件,并且你可以生成一些图形或者是终端应用,还有动态链接库。

但是它并不支持16位的源码,因为他依赖的类型(特别是分段指针)是不被Unix编译器所支持的。当前,对于对于微软编译器的一些特征例如本地COM支持和结构化的异常处理等都是不支持的。所以,当你使用Winelib去编译你的应用程序的时候,你可能需要去做一些修改。下面我将要介绍如何去做这个工作。

当你使用Winelib重新编译你的应用程序的时候,你获得的是对Unix API的调用,也就是说直接从你的Windows源码中调用Unix的API。相对在wine中运行一个未被修改的Windows应用程序来说,这需要一个很好的整合。另一个非常好的地方就是Winelib应用程序可以非常简单的在非intel架构的处理器上重新编译,并且不需要慢速的这个处理器的模拟器就能运行。

2:系统需求

Winelib的系统需求和Wine的系统需求是相似的。

基本上就是如果你能在你的计算机上运行Wine,那么你就能在你的计算机里面运行Winelib。但是反过来可就不一定了。你也可以在不被Wine支持的平台上编译Winelib和Winelib应用程序,一个典型的平台就是非386处理器。但这依然是未知的领域。不过目标是一个386平台也是非常合理的。

主要的不同就是编译器变得更加重要了。极力推荐您使用gcc,g++和GNU的二进制工具。越早使用gcc编译器越好。对于任何数量的代码,你不能考虑比gcc 2.95.2编译器更早的编译器了。最新的gcc编译器包含了一些有用的bug修复和对匿名结构体和共用体有更好的支持。这能够宝珠你减少对你代码的修改。但是对于一些编译器的不稳定的发行版,在你得产品中不要使用他们。

3: 开始

3.1 Winemaker介绍

那么当我们使用Winelib去编译一个Windows应用程序的时候需要什么呢?当然,这依赖于你的程序的复杂程度,但是也是有一些所有应用程序共享的点:

  1. 你的文件可能是有问题的。例如他们可能都是大写:HELLO.CPP。那样工作起来可能不是很好。
  2. 你的include语句中的文件名称可能是错误的:他们可能包含Windows.h而不是windows.h
  3. 你的include语句可能使用’\’而不是’/’。’\’是不被Unix编译器识别的,但是’/’是被这两个环境都识别的
  4. 你可能需要运行一个DOS来进行一个Unix文件转换,否则,当编译器认为你的’\’不是在一行的末尾的时候,你将会遇到麻烦。
  5. 你需要编写一个新的makefile文件

要注意这些所有的问题就是使用Winemaker。

Winemaker是一个Perl脚本,他被设计来帮助你启动你的Windows项目到Winelib的转换。为了这样做,他会分析你的代码,解决上面遇到的问题并且直接生成一个Makefile文件。

我们假设你已经在Wine源码的根目录下面。把你的项目转换到Winelib是非常简单的,只需要下面两行命令(注意第一个命令最后面的点)

winemaker --lower-uppercase .
make

但是事情别没有那么简单。

3.2 实例测试

在开始一个大项目之前,我们可能想要使用一个小项目来尝试一下。notepad应用是非常合适的。他能够在programs子目录中找到。

notepad是一个非常简单的应用,但是也有一些C,头文件和资源文件。

如果在notepad目录中包含一些之前构建的文件,首先执行make clean清空一下。创建一个单独的文件夹命名为notepad2,他不能和应用的Wine复制版本冲突。将notepad中的源码(.c,.h,*.rc文件,还有就是图标文件)复制到notepad2目录中。

下面执行上面刚刚说的那两个命令:

winemaker --lower-uppercase .
make

注意,在链接的时候因为没有定义到wnsprintfW的引用就会失败。

这是因为我们没有指定需要链接的库。通常情况下你是知道你需要什么样的库或者是在你之前的Makefile文件或者是项目文件中能够找到这些需要的库。

为了解决这个问题,打开notepad/Maekfile.in文件,寻找变量IMPORTS.就会出现一个导入的库列表。然后重新运行winemaker,但是这些库前面需要加上前缀-i。

winemaker --lower-uppercase -icomdlg32 -ishell32 -ishlwapi -iuser32 -igdi32 -iadvapi32 .
make

这样就能够编译成功了,编译完成之后,我们就是可以运行notepad2.exe.so或者是./notepad2.exe来运行了。

是不是很激动呢?

好了,这篇文章就先到这里,后面,我们还需要对Winelib进行更深一步的了解。

(二):winelib用户手册1相关推荐

  1. 第九次作业——测试报告和用户手册

    一.测试报告 1.兼容性测试 功能 描述 效果 Chrome浏览器 FireFox浏览器 IE浏览器 war 端浏览器 管理员登录 管理员用户登录功能 弹出"登录成功"对话框,进入 ...

  2. 基于linux的地震数据处理软件的设计与实现,地震数据处理软件系统与应用实验指导书...

    <地震数据处理软件系统与应用实验指导书>由会员分享,可在线阅读,更多相关<地震数据处理软件系统与应用实验指导书(14页珍藏版)>请在人人文库网上搜索. 1.地震数据处理软件系统 ...

  3. 时间序列分析软件Hector用户手册(二)

    时间序列分析软件Hector用户手册(二) 5 模型 5.1 震后形变 5.2 多趋势 5.3 地球物理信号 6 可接受格式 6.1 mom格式 6.2 enu格式 6.3 neu格式 6.4 rlr ...

  4. Gate用户手册(二)怎样运行Gate以及可视化

    原文通道:http://wiki.opengatecollaboration.org/index.php/Users_Guide:How_to_run_Gate#Interactive_mode 原文 ...

  5. W5300E01-ARM用户手册版本1.0(二)

    本用户手册将为大家介绍W5300E01-ARM,它是W5300基于ARM920T的功能评估测试板.共分为9大板块,包括有概述.产品说明.硬件设计向导.板操作.配置开发环境.Linux 内核补丁与编译. ...

  6. workbench3.2用户手册学习笔记二

    2 Introduction to Workbench 2.1 Introduction 本章向您介绍 Wind River Workbench 及其基于 Eclipse 的用户界面 (UI) 的基本 ...

  7. [QNX Hypervisor 2.2用户手册]12.2 术语(二)

    专栏目录​​​​​​​ IOMMU - 输入输出内存管理单元 输入输出内存管理单元(Input/Output 内存管理单元).一个内存管理单元(MMU)将支持的DMA I/O总线连接到主存.就像传统的 ...

  8. 中国移动MM7 API用户手册(二)

    1.概述 该文档说明了SP如何使用中国移动集团公司的MM7 API程序与彩信中心进行对接,实现MM7接口的通讯,开发增值业务应用. 该MM7 API是使用纯Java开发的,使用的JDK的版本为JDK1 ...

  9. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  10. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )

    一.需求分析 1.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...

最新文章

  1. ValueError: urls must start with a leading slash
  2. java web总结:tomcat使用教程
  3. 如何使用BHO定制你的Internet Explorer浏览器
  4. web前端开发职业技能证书_1+x证书web前端开发职业技能等级标准1
  5. 的文件夹结构_Windows中你需要知道的目录结构 「第一期」
  6. 贷款被拒,因为你的手机有问题
  7. 如何让 C++ 和 C# 一样易用,而且效率更高?
  8. 以Jar形式为Web项目提供资源文件(JS、CSS与图片)
  9. 怪兽充电宝 共享充电宝源码
  10. c语言斐波那契数列递归数组,C语言数据结构学习:递归之斐波那契数列
  11. 华为零售商品识别一等奖方案
  12. The Penn Discourse TreeBank 2.0
  13. Delphi视频教程
  14. Windows 无法卸载IE9怎么办
  15. Python 代码超级玛丽实现
  16. balabala视频格式转换器
  17. Android 快速集成文档校正能力 超简单
  18. 服务器站点地址是什么意思,云服务器地址是什么意思
  19. Mydrivers: DVD Jon出手,绕过ATT激活iPhone
  20. Linux下mplayer播放器安装及故障排除

热门文章

  1. [python 译] 基于面向对象的分析和设计
  2. JavaWeb各大组件生命周期
  3. mongodb 索引1
  4. Visual Studio 2012安装VASSISTX插件后导致CPU高的解决的方法
  5. JavaScript要点 (一) 变量-作用域
  6. 成为java高手的八大条件
  7. Who's in the Middle - poj 2388 (快速排序寻找中位数)
  8. 2015年7月15日 JS第一课(JS,声明变量,数据类型)
  9. php中include包含文件路径查找过程
  10. 房价增幅或于年底见顶