欢迎来到天天文库
浏览记录
ID:9280047
大小:44.60 KB
页数:14页
时间:2018-04-26
《转 windows下程序向linux下移植实践》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、转Windows下程序向Linux下移植实践(转)Windows下程序向Linux下移植实践2010-04-2610:29Windows下程序向Linux下移植实践2005年2月【摘要】根据zxms80项目的会议调度模块移植的经验,本文提出了Windows平台上程序向Linux下移植所碰到的一些典型问题,并举例给出了相应的解决方法,文中还描述了使用pwlib库时makefile文件的编写方法,该方法也适用于不使用pwlib库开发时的一般情况,供要进行移植的同仁参考之用。一、问题的提出在程序员中有这样一个说法,若一个程序不能移植到Linux下,那这个程序将看不到未来。由
2、于Linux操作系统源码公开是的,开发库等辅助工具都是源码公开的,这样就减少了程序的不可预知性,而且出现错误可以大家一起修正、完善,而Windows平台下所有的操作系统Api就给了个接口,即使出现莫名奇妙的错误也只能望着接口兴叹了。再加上Linux操作系统本身和它上面的许多工具软件是免费的,更是吸引了更多的公司和程序开发人员将程序开发转向Linux。在程序跨平台的移植过程中,将存在操作系统API的不同、文件名大小写识别不同、路径分隔符不同、不同开发平台数据类型的不一致等较一般性的问题。对于这些一般性的问题怎样很好的来解决呢?Linux下的工程都是使用makefile文
3、件来管理的,怎样编写出相应的makefile文件呢?这些问题都是本文后面将要阐述的。二、解决思路本文撰写的目的是为了提供Windows平台上程序向Linux下移植所碰到的一些典型问题及相应的解决方法,供要进行程序平台移植的同仁参考之用。文中还描述了使用pwlib库时makefile文件的编写方法,对于使用了pwlib库进行开发的程序能快捷的建立makefile工程文件,避免了自己手动书写makefile的繁杂工作。特别是3.2.6可以移植的数据类型一节中对于不同开发平台数据类型的不一致提出了一个简捷通用的解决方法,不用修改源程序中任何代码即可在Linux下使用Wind
4、ows开发平台上的一些数据类型。三、实践情况3.1.Makefile的编写Linux下一般都是使用make工具来管理和编译一个大的开发工程的所有源文件,make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样的去编译和链接程序,makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
5、在Windows的一些IDE如VC中将自动帮你生成相应的makefile,所有这些都是透明的,但在Linux下你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。make工具采用增量编译的方式,每次只编译被改动过确实需要编译的源文件,每次编译时make工具将自动判断那些源文件需要重新编译,当一个工程很大而又只改动了很少的几个源文件,这将节省很多时间。具体makefile文件的编写规则可以查看make的man和info文档(在Linux命令行方式下输入:manmake或infomake)。makefile文件的
6、编写规则很多,重要的是怎样使用最简单的方式写出我们自己需要的makefile文件。网上也有很多介绍资料,网上有一篇很好的介绍makefile文件编写的文章:下文将着重介绍使用pwlib开发库的工程的makefile的编写,但对于其它工程只需将common.mak文件中对pwlib库进行编译的脚本去掉也可适用。3.1.1使用pwlib开发库的工程的makefile的编写PWLib是PortableWindowsLibrary的缩写,翻译为轻便的Windows类库.PWLib采用C++编写,设计初衷是为了能让Openh323在Windows和Unix的X-Windows下
7、运行,不过随着一步步的完善PWLib已经被跨平台的程序所广泛采用。查看Pwlib的主目录下/samples/hello_world/目录下例子程序的makefile文件可以发现该Makefile文件内容如下:#SimplemakefileforthehelloworldprogramPROG=helloSOURCES=hello.cxxifndefPWLIBDIRPWLIBDIR=$(HOME)/pwlibendifinclude$(PWLIBDIR)/make/ptlib.mak#EndofMakefile实际上就是使用了Pwlib库的ptlib.
此文档下载收益归作者所有