(二):winelib用户手册1
(一):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应用程序的时候需要什么呢?当然,这依赖于你的程序的复杂程度,但是也是有一些所有应用程序共享的点:
- 你的文件可能是有问题的。例如他们可能都是大写:HELLO.CPP。那样工作起来可能不是很好。
- 你的include语句中的文件名称可能是错误的:他们可能包含Windows.h而不是windows.h
- 你的include语句可能使用’\’而不是’/’。’\’是不被Unix编译器识别的,但是’/’是被这两个环境都识别的
- 你可能需要运行一个DOS来进行一个Unix文件转换,否则,当编译器认为你的’\’不是在一行的末尾的时候,你将会遇到麻烦。
- 你需要编写一个新的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.兼容性测试 功能 描述 效果 Chrome浏览器 FireFox浏览器 IE浏览器 war 端浏览器 管理员登录 管理员用户登录功能 弹出"登录成功"对话框,进入 ...
- 基于linux的地震数据处理软件的设计与实现,地震数据处理软件系统与应用实验指导书...
<地震数据处理软件系统与应用实验指导书>由会员分享,可在线阅读,更多相关<地震数据处理软件系统与应用实验指导书(14页珍藏版)>请在人人文库网上搜索. 1.地震数据处理软件系统 ...
- 时间序列分析软件Hector用户手册(二)
时间序列分析软件Hector用户手册(二) 5 模型 5.1 震后形变 5.2 多趋势 5.3 地球物理信号 6 可接受格式 6.1 mom格式 6.2 enu格式 6.3 neu格式 6.4 rlr ...
- Gate用户手册(二)怎样运行Gate以及可视化
原文通道:http://wiki.opengatecollaboration.org/index.php/Users_Guide:How_to_run_Gate#Interactive_mode 原文 ...
- W5300E01-ARM用户手册版本1.0(二)
本用户手册将为大家介绍W5300E01-ARM,它是W5300基于ARM920T的功能评估测试板.共分为9大板块,包括有概述.产品说明.硬件设计向导.板操作.配置开发环境.Linux 内核补丁与编译. ...
- workbench3.2用户手册学习笔记二
2 Introduction to Workbench 2.1 Introduction 本章向您介绍 Wind River Workbench 及其基于 Eclipse 的用户界面 (UI) 的基本 ...
- [QNX Hypervisor 2.2用户手册]12.2 术语(二)
专栏目录 IOMMU - 输入输出内存管理单元 输入输出内存管理单元(Input/Output 内存管理单元).一个内存管理单元(MMU)将支持的DMA I/O总线连接到主存.就像传统的 ...
- 中国移动MM7 API用户手册(二)
1.概述 该文档说明了SP如何使用中国移动集团公司的MM7 API程序与彩信中心进行对接,实现MM7接口的通讯,开发增值业务应用. 该MM7 API是使用纯Java开发的,使用的JDK的版本为JDK1 ...
- qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...
作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...
- 实习二 栈、队列和递归算法设计 (题目:停车场管理 )
一.需求分析 1.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...
最新文章
- ValueError: urls must start with a leading slash
- java web总结:tomcat使用教程
- 如何使用BHO定制你的Internet Explorer浏览器
- web前端开发职业技能证书_1+x证书web前端开发职业技能等级标准1
- 的文件夹结构_Windows中你需要知道的目录结构 「第一期」
- 贷款被拒,因为你的手机有问题
- 如何让 C++ 和 C# 一样易用,而且效率更高?
- 以Jar形式为Web项目提供资源文件(JS、CSS与图片)
- 怪兽充电宝 共享充电宝源码
- c语言斐波那契数列递归数组,C语言数据结构学习:递归之斐波那契数列
- 华为零售商品识别一等奖方案
- The Penn Discourse TreeBank 2.0
- Delphi视频教程
- Windows 无法卸载IE9怎么办
- Python 代码超级玛丽实现
- balabala视频格式转换器
- Android 快速集成文档校正能力 超简单
- 服务器站点地址是什么意思,云服务器地址是什么意思
- Mydrivers: DVD Jon出手,绕过ATT激活iPhone
- Linux下mplayer播放器安装及故障排除