将Linux代码移植到Windows的简单方法

2016-01-29 19:06 27 1 收藏

将Linux代码移植到Windows的简单方法,将Linux代码移植到Windows的简单方法

【 tulaoshi.com - Linux 】

 

  一.前言

  Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的。Windows平台根本无法直接利用这些源代码资源。如果想要使用完整的代码,就要做移植工作。因为C/C++ Library的不同和其他的一些原因,移植C/C++代码是一项困难的工作。本文将以一个实际的例子(Tar)来说明如何把Linux代码移植到Windows平台上。移植过程将尽量少修改代码,以便代码的运行逻辑不会发生任何变动。保留绝大部分软件主要功能。

  二.准备工作

  Tar是Linux平台下面一个打包工具。移植这样一个程序到windows平台需要做那些工作呢?

  首先是一些准备工作,在Windows平台上面安装上Cygwin的最新版本,在Cygwin中安装好GCC等开发工具。 同样也需要一个Windows开发环境。可以使用最新版本Visual Studio, Microsoft Visual Studio .NET 2003。从www.gnu.org上取得Tar的最新源代码,版本是1.13。在Cygwin下面解开tar-1.13.tar.gz.源代码包。注意请不要在Windows下面使用WINRAR或者WINZIP来解压缩。 WINRAR和WINZIP在解压缩某些tar.gz包的时候会有问题。使得解包之后的目录和文件出现异常。如果是源代码包将有可能不能在Cygwin下面正确编译。解开压缩包之后,进入 tar-1.13目录,在当前的目录下面输入

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

./configure

  命令,运行完毕之后,再次输入

make

  命令。开始编译tar的Cygwin版本。

  编译基本上不会有问题,进入src目录,可以看到新编译好的Tar程序tar.exe。

  Cygwin是一个API层的Linux模拟环境。如果能够在Cygwin下面编译,运行。实际上也就是能在Windows下面编译和运行,只是需要有一层中间API模拟某些Linux特有的操作。简单的判断一个Linux程序能不能移植到Windows平台下面,就是看是否能在Cygwin下面编译源代码,并运行程序。

  在Cygwin中编译Tar的源代码,判断能否移植只是其中一个原因。另外一个原因是移植代码过程中需要一个特殊的头文件config.h。config.h是移植过程中最重要的源代码文件。Config.h文件并不是源代码本身的一部分。文件是在Cygwin下面运行”./configure”命令时生成的。在Cygwin下运行”./Configure”命令时,会根据Cygwin平台开发环境生成config.h文件。编译时也需要config.h文件对代码编译项进行控制。移植工作也以config.h文件为基础。

  接下来就是构造Windows工程。先用Visual Studio .NET 2003创建一个空的工程(Project),命名为WinTar。根据Cygwin中的编译输出信息,Tar主要的代码在Src和lib两个目录中。把这两个目录复制到新工程里,并把代码加入到工程中。然后复制Config.h到WinTar工程目录下面。

  准备工作基本上完成了,接着就是移植。移植过程可以分为3个部分。

  三.第一个目标:使得WinTar能编译过(Compiler)

  第一个目标的完成主要围绕Config.h来实现。Linux下开发环境和Windows开发环境很大的不同是C Library头文件和各种类型的定义不同。而Config.h提供了完整编译开关来处理因为不同平台间开发环境不同带来的不同之处。现在需要手工去修改这个文件,以便Tar源代码能适应Windows平台。

  首先调整各种C Library头文件(Header File)的包含问题。在Config.h中定义了很多类似HAVE_XXXX_H。比如定义HAVE_CONFIG_H为1表示工程中可以使用config.h。

  #define HAVE_MALLOC_H 1表示可以在工程中使用Malloc.h头文件。通过调整这些定义值,可以去除一些Windows平台下面没有的头文件包含。也许其他地方还有很多头文件包含关系需要处理,但是这里的定义基本上解决了大部分的头文件包含问题。

/* Define if you have the <linux/fd.h header file. */
/* #undef HAVE_LINUX_FD_H */

/* Define if you have the <locale.h header file. */
#define HAVE_LOCALE_H 1

/* Define if you have the <malloc.h header file. */
#define HAVE_MALLOC_H 1

/* Define if you have the <memory.h header file. */
#define HAVE_MEMORY_H 1

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/linux/)

/* Define if you have the <ndir.h header file. */
/* #undef HAVE_NDIR_H */

  第二步,调整各种数据类型的定义,可能在linux下面会有很多特殊的数据类型定义,Config.h文件中也包含了一部分可以变动的数据类型定义项。这些定义一般都是基本数据类型的重定义。可以根据Windows平台下的数据类型定义情况进行修补。比如在Cygwin的开发环境中有个数据类型mode_t, Visual Studio的C Library中却(作者 很土,联系方法 jackforce at 163 dot com)找不到这样数据类型。Tar代码中使用了大量的mode_t数据类型. config.h中提供了修改项来让开发人员自己修改mode_t的定义,并提示如果mode_t在<sys/types.h中没有定义的话,可以把他定义为int型。所以在config.h加上#define mode_t int。这样mode_t没有定义的问题就解决了。其他的数据类型也是同样对待处理。

* Define to

来源:http://www.tulaoshi.com/n/20160129/1508458.html

延伸阅读
将pdf文件转换为word文件的最简单方法 很多网友想知道怎么把PDF文件转换为word文件,方便编辑和使用,小编这里就教大家使用福昕阅读器这款软件可以轻松一步搞定。当然前提是你安装了word和福昕阅读器。 福昕阅读器是一款小巧高效的pdf阅读器,主要用于阅读、搜索和打印PDF文件。您可以通过福昕阅读器测量距离、插入图片、添加链接、...
现代女性由于本身特殊的生理过程,日常生活中又肩负工作、家庭的双重压力,往往比其他人群更易受到风、寒、暑、湿、热等侵害。因为女性较敏感,又易因忧郁、急躁、怒气、思虑过度等内在因素扰乱气血运行,从而导致内分泌失调。下面七个方法,有助于女性自我调整内分泌。   一、黄豆天生是女人的好朋友 黄豆可以改变体内激素的分泌...
标签: SQLServer
摘要:本文描述了将Access数据库转换到SQL Server 数据库的过程和工具 简介 随着用户对于企业级高性能数据库的需求的增长,用户时常要从Microsoft Access Jet引擎的文件-服务器环境下转换到 Microsoft SQL Server的客户-服务器环境。Microsoft Office 2000中的Access 2000 Upsizing Wizard可实现将数据表和 查询转移到SQL Server 7.0中。如...
小鱼折纸的简单方法 准备材料:正方形卡纸、剪刀、马克笔 第一步:首先将准备好的正方形卡纸,剪刀,马克笔都放在桌面上。 第二步:将准备好的正方形卡纸沿着三角对折一下。 第三步:对折之后将三角形再一次对折一下,折成一个小三角形。 第四步:然后将刚刚折的卡纸打开,再沿着折痕将卡纸折叠。 第五步:然后将刚刚折...
小狗折纸的简单方法 准备材料:正方形卡纸、马克笔 第一步:首先将准备好的正方形卡纸放在桌面上呈三角对折。 第二步:然后将折好的三角形底边右边角往上方折叠一下。 第三步:然后将三角形左边的角也往上折一下,折的长度和右边一样。 第四步:将卡纸角度翻转一下,然后把底部的尖角往上折叠。 第五步:然后用准备好的...

经验教程

157

收藏

47
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部