搜索产品 minitos开源嵌入式操作系统 minitos Windows minitos Menu
首 页 产品展厅 精品文章 嵌入式资讯 下载中心 论坛 嵌入式城市 技术应用
 收藏社区
 免费注册
 用户登陆
 帮助中心
社区首页 业界新闻 精品文章 下载中心 minitos2站 在线学习 论坛 嵌入式提问交流学习 供求信息 留言 minitos操作系统 测试
今天是:2010年9月10日 星期五   您现在位于: miniTOS生活社区 →  将Linux代码移植到Windows的简单方法(2)
谷歌搜本站效率更高
将Linux代码移植到Windows的简单方法(2)
2005年6月6日  作者:  发布人:专业嵌入式网站      本文已被浏览 1238 次


  四:代码运行正常

  实际上当link问题解决之后,程序可以在windows环境中运行时,一切就尽在掌握了。如果不考虑做多平台的程序的话,这个时候就可以任意去修改程序了。不过在代码调试过程可能需要一个参照,看看正常的程序运行流程是怎么样的。刚刚移植过来的程序在很多地方并不能马上就能正常的运行。回到Cygwin中,重新编译一个可以调试的版本(在GCC编译选项加上-g3),在需要的时候可以在Cygwin中调试程序。调试可以用GDB或者Insight。如果习惯Windows 平台下面编程,可以使用Insight,这是一个TCL/TK脚本程序,它提供了一个Windows界面以方便用户调试程序,不过Insight最终还是调用GDB。在这里具体调试就不细说明了。

  五:多平台代码

  移植后的代码(本文于2003年完成. 如需要转载 请联系jackforce@163.com)如果需要在多个平台上面运行,就要在lib目录里面大做文章了。提供自己的函数库,并根据各个平台进行调整。Tar的代码由Config.h和一些编译选项来控制如何在各个不同的平台上面做编译。Lib则提供了很多C Library函数或者不同平台下面的其他函数的替代版本。这样Tar在编译过程中就不会因为某些平台下某些函数的缺失而编译不过。多平台支持,一般都是在代码中加上很多编译开关,在编译期间去分隔Linux,Windows或者其他平台下面的特殊代码。比如utime.h头文件的包含问题。因为文件在Linux(gcc)下面和Windows(cl)下所处的C Library目录不同。包含的处理办法就不一样。可能需要这样写才能完全正确的包含。

#if HAVE_UTIME_H ---- 如果有utime.h 文件
# ifdef WIN32 -----如果是win32环境 
# include <sys/utime.h> -----包含sys/utime.h
# endif
# ifdef LINUX ---- 如果是Linux环境
# include <utime.h> ---- 包含utime.h 
# endif
#else --- 如果没有utime.h定义出需要的结构 
struct utimbuf
{
long actime;
long modtime;
};
#endif 

  在其他的代码中基本上也是这样的处理。根据编译环境的不同来编译不同的代码。 这样的define的区隔,主要就是为了区隔不同平台的不同细微区别。有的区别也许是某些常量没有定义,有些区别是某些函数不存在。如果代码中调用函数在某些平台下面不存在,就需要提供一个lib去提供这些函数。Tar的Lib的作用也是如此。

  基本上代码的移植是前难后易。前期首先要保证源代码本身的逻辑不能变动,所以在修改代码方面只能尽量修改外围的代码,而不是修改源代码本身。如果link过了之后,则就是一般的Windows下面的编程了,可以根据需求任意修改移植后的代码了。最难的地方可能就是OS级不同概念的替换了。C Library虽然在各个平台上有不同之处,但是总是比较接近,不同的地方可以提供自己编写的代码来替换。但是OS级的概念,和平台相关性太大,一般不太容易替换。

  六:扩展问题,待解决的问题

  如果需要把移植过来的代码改成DLL或者lib给其他的工程调用。比如给其他的工程提供一个解包Tar文件的功能。如果不加修改,那么移植过来的代码有很多缺陷。

  首先是多线程支持问题。如果代码中有很多全局变量,那么改成DLL或者lib之后就不能在多线程下面调用。

  其次,DLL接口表。移植后的代码入口是main函数,虽然整个工程里面有很多独立功能,但是这些独立功能的调用都是通过使用不同的参数来实现。如何输出接口表给其他工程使用,需要做些功夫。

  三、控制 原始的控制台程序在下了运行参数之后,一般都是一头运行到底的,也有可能在中间有些要求输入某些信息的。这样的程序如何集成到其他的工程中并受到其他工程的控制?比如遇到某些错误要返回等等。在Tar代码中遇到错误就直接退出程序。显然这些地方就不合DLL设计要求。可能需要重新设计代码的结构。

  四,输出信息。Tar工程里面很多向控制台输出的信息。这些信息输出需要重新定向或者屏蔽。

  第三第四部分可以参考Linux下面的FrontEnd程序,即只是为某个特殊的程序提供的一个GUI界面的程序。FrontEnd程序就是控制了主程序的运行并重新定向输出信息到GUI界面上。

  注1. Cygwin,是Windows平台下面的一个Linux模拟环境。可以从www.Cygwin.com上下载全部内容。

  注2. Windows Services for UNIX (SFU)的SDK可以从微软网站上获得 http://www.microsoft.com/windows/sfu/ 

  注3. UNIX Application Migration Guide 可以从MSDN中取得,如果没有MSDN可以从微软MSDN网站上取得。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnucmg/html/ucmglp.asp 

  注4. Tar, Cygwin下面有Tar。但是只能在Cygwin下面运行 或者必须提供Cygwin的平台DLL才能在windows下面单独使用Tar程序。
注5. CL是微软的C/C++编译器,包含在Visual Studio各个版本中

  本文于2003年完成. 如需要转载 请联系jackforce@163.com,如果有看到部分干扰信息.请原谅.主要避免转载过程中作者信息丢失用.不得以为之,请各位原谅.

  PS : 

  用一个例子简单说明了从linux平台移植到windows平台上的一些需要注意的问题和解决方法.

  例子仅用来说明移植过程产生的问题用.
 发布人:hello2000
 [ → 我要发表文章 ]
上篇文章:将Linux代码移植到Windows的简单方法
下篇文章:多媒体软件资源Open Source
→ 主题所属分类:  精品文章 → 技术文章 → 『关闭窗口』
 热门文章
 
 skyeye安装运行的详细方法--step by step (20796)
 cygwin下安装arm-elf-gcc一种简便方法 (5938)
 充电器设计及镍氢电池充电方法2 (3394)
 镍氢电池充电方法及充电器(二) (2546)
 Instruction Set: Analysis of SH66x... (2309)
 FAT16文件系统格式详细说明 (2134)
 充电器设计及镍氢电池充电方法1 (1932)
 使用GDB-gnu debug (1690)
 单片机数码管显示驱动设计 (1681)
 一步一步的制作 arm-linux 交叉编译环境 (1577)
 最近更新
 
 QTE 4安装方法 (6月3日)
 真是好文,fc6安装qte,共享 (6月3日)
 超低价部分原装IGBT销售 (6月2日)
 Protel99SE快捷键大全 (6月2日)
 Protel 99 SE的功能特性 (6月2日)
 Protel 99 SE的系统组成 (6月2日)
 设计PCB时抗静电放电(ESD)的方法 (6月2日)
 模拟集成电路 (6月2日)
 数字集成电路 (6月2日)
 语音集成电路 (6月2日)
 文章搜索
 
搜索选项:            
  → 评论内容 (点击查看)
姓名:mtsnpzzd  E-mail:tzaxle@nadbvt.com  发表时间:2010年2月18日 13时25分
评论内容:ylXDo0  <a href="http://byfbnftjwmkg.com/">byfbnftjwmkg</a>, [url=http://oyvermeiwgti.com/]oyvermeiwgti[/url], [link=http://zrnrqjrqbiaf.com/]zrnrqjrqbiaf[/link], http://vfkrvxcsrmnp.com/
姓名:fdkvjs  E-mail:jglwrf@fizxhr.com  发表时间:2010年1月5日 0时42分
评论内容:pVc4AH  <a href="http://fapihhjtczxb.com/">fapihhjtczxb</a>, [url=http://thnedrbgtezd.com/]thnedrbgtezd[/url], [link=http://ttizhjxvpxps.com/]ttizhjxvpxps[/link], http://bymiwunremnd.com/
姓名:wwcshfyadm  E-mail:nehege@ywvqar.com  发表时间:2009年11月7日 22时17分
评论内容:jDgI0e  <a href="http://snpxulvbrroo.com/">snpxulvbrroo</a>, [url=http://ydvecusqsfvk.com/]ydvecusqsfvk[/url], [link=http://rkisjzqdyqtl.com/]rkisjzqdyqtl[/link], http://eqaquqapspqm.com/
姓名:kdhjfdh  E-mail:yjfyjj@sdf.com  发表时间:2009年5月12日 15时10分
评论内容:<a href=http://www.flytickets.com.cn/planeticket/7_1.html>成都机票</a> <a href=http://www.langfangpc.cn>廊坊电脑</a> <a href=http://www.flytickets.com.cn/planeticket/6_1.html>重庆机票</a> <a href=http://www.jipiaoku.cn/>机票</a>
  → 发表我的评论
您的姓名:  您的E-mail:

评论内容:
发表评论:  
娱乐中心 ┋ 关于本站 ┋ 站内短信 ┋ 广告服务 ┋ 友情链接 ┋ 与我在线 ┋ 版权声明  TOP
本站总访问量: 197291 人次 ┋ 最高峰 589 人在线 ┋ 当前有 14 人在线
专业嵌入式网站 [完整型] ┋页面执行时间:156.250 毫秒
Copyright © 2002-2005 minitos.com All Rights Reserved
友情链接: embed嵌入开发网 ┋ 嵌入式提问网 ┋ 嵌入式资料网 ┋ 网络站 ┋ 论坛 ┋