Windows下程序向Linux下移植细节

本文根据ZXMS80项目经验,探讨Windows程序移植到Linux时遇到的挑战,如API差异、文件名大小写敏感性、路径分隔符等问题,并提供了详细的解决策略。重点介绍了使用pwlib库时如何编写makefile,以及移植过程中数据类型的处理。文章旨在为进行平台移植的开发者提供参考。
摘要由CSDN通过智能技术生成

【摘要】

根据zxms80项目的会议调度模块移植的经验,本文提出了Windows平台上程序向Linux下移植所碰到的一些典型问题,并举例给出了相应的解决方法,文中还描述了使用pwlib库时makefile文件的编写方法,该方法也适用于不使用pwlib库开发时的一般情况,供要进行移植的同仁参考之用。

    作者博客:http://blog.csdn.net/wenhm/

一、问题的提出

    在程序员中有这样一个说法,若一个程序不能移植到Linux下,那这个程序将看不到未来。

由于Linux操作系统源码公开是的,开发库等辅助工具都是源码公开的,这样就减少了程序的不可预知性,而且出现错误可以大家一起修正、完善,而Windows平台下所有的操作系统Api就给了个接口,即使出现莫名奇妙的错误也只能望着接口兴叹了。再加上Linux操作系统本身和它上面的许多工具软件是免费的,更是吸引了更多的公司和程序开发人员将程序开发转向Linux

在程序跨平台的移植过程中,将存在操作系统API的不同、文件名大小写识别不同、路径分隔符不同、不同开发平台数据类型的不一致等较一般性的问题。对于这些一般性的问题怎样很好的来解决呢?Linux下的工程都是使用makefile文件来管理的,怎样编写出相应的makefile文件呢?这些问题都是本文后面将要阐述的。

二、解决思路

   本文撰写的目的是为了提供Windows平台上程序向Linux下移植所碰到的一些典型问题及相应的解决方法,供要进行程序平台移植的同仁参考之用。

文中还描述了使用pwlib库时makefile文件的编写方法,对于使用了pwlib库进行开发的程序能快捷的建立makefile工程文件,避免了自己手动书写makefile的繁杂工作。

特别是<3.2.6可以移植的数据类型>一节中对于不同开发平台数据类型的不一致提出了一个简捷通用的解决方法,不用修改源程序中任何代码即可在Linux下使用Windows开发平台上的一些数据类型。

三、实践情况

3.1.Makefile的编写

       Linux下一般都是使用make工具来管理和编译一个大的开发工程的所有源文件,make命令执行时,需要一个Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。在Windows的一些IDEVC中将自动帮你生成相应的makefile,所有这些都是透明的,但在Linux下你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

     make工具采用增量编译的方式,每次只编译被改动过确实需要编译的源文件,每次编译时make工具将自动判断那些源文件需要重新编译,当一个工程很大而又只改动了很少的几个源文件,这将节省很多时间。

具体makefile文件的编写规则可以查看makeman info文档(Linux命令行方式下输入:man make info make)makefile文件的编写规则很多,重要的是怎样使用最简单的方式写出我们自己需要的makefile文件。

    网上也有很多介绍资料,网上有一篇很好的介绍makefile文件编写的文章:

 

下文将着重介绍使用pwlib开发库的工程的makefile的编写,但对于其它工程只需将common.mak文件中对pwlib库进行编译的脚本去掉也可适用。

3.1.1使用pwlib开发库的工程的makefile的编写

PWLibPortable Windows Library的缩写,翻译为轻便的Windows类库.PWLib采用C++编写,设计初衷是为了能让Openh323WindowsUnixX-Windows下运行不过随着一步步的完善PWLib已经被跨平台的程序所广泛采用。

查看Pwlib的主目录下/samples/hello_world/目录下例子程序的makefile文件可以发现该Makefile文件内容如下:

# Simple makefile for the hello world program

PROG    = hello

SOURCES = hello.cxx

ifndef PWLIBDIR

PWLIBDIR=$(HOME)/pwlib

endif

include $(PWLIBDIR)/make/ptlib.mak

# End of Makefile

实际上就是使用了Pwlib库的ptlib.mak文件,编译时需要的头文件,相应的编译选项都在ptlib.mak文件中设置好了。

我们只需在该makefile文件所在目录下,命令行输入make all命令即可编译出程序的Release版本和Debug版本,它们分别放在当前目录的obj_linux_x86_robj_linux_x86_d子目录下。

下面对该

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值