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

2016-01-29 19:06 23 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目录,在当前的目录下面输入

./configure

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

make

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

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

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

  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

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

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

  第二步,调整各种数据类型的定义,可能在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

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

延伸阅读
标签: 宝宝 育儿
简单正确的6种退烧办法 民间错误退烧观念和方法 综观上述论点,家长应该要有正确的态度,将发烧当作一种警讯。发烧是因各种疾病引起的身体防卫性反应。研究显示,身体负责吞食细菌的白血球,在体温升高时(38℃~39℃)其吞食能力加强。因此当小孩因感冒或其他感染疾患引起体温升高时,运用各种可能的方法,要把体温立即降到正常范围,并非明...
现代女性由于本身特殊的生理过程,日常生活中又肩负工作、家庭的双重压力,往往比其他人群更易受到风、寒、暑、湿、热等侵害。因为女性较敏感,又易因忧郁、急躁、怒气、思虑过度等内在因素扰乱气血运行,从而导致内分泌失调。下面七个方法,有助于女性自我调整内分泌。   一、黄豆天生是女人的好朋友 黄豆可以改变体内激素的分泌...
标签: 丰胸
胸部发育不良是如何造成的 有的女性胸部不够丰满,主要是由于胸部发育不良所导致的。中医上认为,胸部发育不良主要与脾胃虚弱、气血不足、胸部经络阻塞导致气血不能上荣于胸部所导致的。一般归结起来主要有以下几点: 不正确减肥 如果在乳房发育的时候,进行药物减肥的话,就会造成体内内分泌失调,这样就会影响到乳房的发育。如果雌激...
标签: 电脑入门
Sublime Text是代码编辑器,支持Linux等操作系统,在Linux系统中需要将Sublime Text固定到launcher中并单击可启动,那么要如何实现呢?下面图老师小编就给大家详细介绍下吧。 那么,那些可以锁定在 Launcher 中并且单击便能够启动的程序是如何做到的呢? 在你的终端输入依次以下指令: cd /usr/share/applications/ ll 你将看到许多以 .de...
标签: 电脑入门
通过Grub(多系统引导管理器)来安装 本人最近摸索Linux系统,想在本机上安装双系统,但我这老爷机上没有软驱,没有刻录机,下载的ISO文件只能存在硬盘上,也只能通过硬盘来安装,在各大Linux的BBS上看了不少关于从硬盘安装Linux系统的贴子,试了N次不成功,最后我对所看贴子所述的内容进行的一些修改,可能是因为Linux系统版本更新了要作一...

经验教程

918

收藏

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