浅谈如何将linux上的程序移植到windows上

原创 2013年12月02日 19:21:38

浅谈如何将linux上的程序移植到windows上

最近在做一个项目,我需要快速的求解大规模稀疏线性方程组,目前网上有一些开源的项目,其中一个较流行的是UMFPACK,从算法本身来说它具有很好的并行性,我需要使用它里面的一些东西,从网上下载的源代码只能在linux运行,但该项目需要在windows上运行,因此需要将UMFPACK移植到windows上,为了方便对程序进行跟踪调试,整个项目在vs2010中进行。

查阅了大量的资料发现目前将linux上的程序移植到windows上绝大部分都是使用的cygwin,我也通过使用cygwin在windows上成功的运行了demo程序,虽然可以使用cl命令来编译demo,但整个过程是在命令行中进行的,程序的跟踪调试也不是太方便。既然想要使用vs2010,因此就不能借助于cygwin。上面这条路行不通,就只能根据makefile文件中的依赖关系,手动在vs2010中修改项目编译链接的条件,从而达到要求。

为了能保证UMFPACK可在vs2010中调试、运行,我是从两个方面入手的:

        (1)判断UMFPACK能否脱离linux环境进行编译

         这一步的主要工作就是判断源程序是否调用了linux自带的函数,从而确定程序移植的可行性。由于源程序的数目过多,在linux下通过makefile文件来管理文件之间的依赖关 系,之后通过make命令来执行程序,从而保证程序的正确执行。其实在windows上也可以运行makefile文件,它的执行命令是nmake,但windows中makefile文件的格式与linux中makefile文件的格式有所不同,因此就需要将linux下的makefile文件转化为windows上的makefile文件,具体格式都可以从网上查到,这里就不在多说。转化之后 得到了运行demo程序,得到了正确的解,这就表明该项目的源文件可以不做修改就移植到windows上。

         (2)在vs2010中建立UMFPACK的工程

         通过第(1)步的验证,linux下的项目可以移植到windows上,那么直接把需要的.c、.h都存放在UMFPACK的目录下,然后在vs2010中将其分别导入到源文件和头文件中,不就可以了吗?这个方案是可行的,但有一个问题,所有.c文件的编译条件都将相同,但是通过观察makefile文件发现,.c文件的编译条件是存在差异的,那这应该怎么办呢, 这时就需要更改每个.c文件的编译条件,解决办法为:vs资源管理器--->选中某个.c文件--->进入其属性页面--->配置属性--->常规,在右边出现的项类型选项中选择“自定义生成工具”,保存之后运行。当有上百个.c文件时,这种方法就不可取了。

          查阅资料,发现了另外一种方法,思路很简单,就是将.c文件按照编译条件进行分类,相同编译条件的文件为一类,然后根据编译条件建立不同的工程。UMFPACK提供的程序是供我自己写的程序调用的,在一个解决方案中将我自己写的程序设定为可执行工程,将UMFPACK提供的源文件设定为静态库工程,然后在可执行工程中引用这些静态库工程就可达到预期的目标。

小结

通过上面的叙述,在linux上编写的程序能够移植到windows上执行,首先判断该程序能否移植到linux上,然后在windows上进行修改,保证其可以运行。在实际的运用中,可以将(2)中的两种方法进行融合,当有很多.c文件的编译条件相同时,就可建一个静态库工程,不多的时候就可与其他文件合建一个工程,这样就可减少所建工程的个数。


相关文章推荐

记一次把Windows程序移植到Linux的过程

场景复现 今天下午,客户反映我们系统的API在Linux下使用时有点问题。发布主管,想在本地做个测试,但是目前现有的Demo程序只有windows版本的,所以找到负责API的我,把该Demo程序从W...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

nmake命令(windows下的makefile)

1. 如果已经有vc6的dsp工程,可直接导出nmake脚本文件(.mak)     “Project - Export Makefile...” nmake -f nMakeTest.m...
  • xiexievv
  • xiexievv
  • 2015年05月17日 00:14
  • 20142

nmake使用以及windows上makefile编写

VC6.0其实已经不再使用makefile文件进行编译了,但是它仍然可以导出makefile文件,后缀名为*.mak,方法是在工程菜单下的导出makefile文件,你也可以将*.mak文件更名为mak...
  • bytxl
  • bytxl
  • 2015年06月01日 19:01
  • 2194

linux到windows移植

windows下一般建的是控制台应用程序,由于使用的库都是跨平台库的,所以移植起来也比较轻松。 问题:msvcprtd.lib(MSVCP90D.dll) : error LNK2005: ...
  • tujiaw
  • tujiaw
  • 2012年08月16日 08:10
  • 3545

Windows项目迁移到Linux总结

个人迁移过程总结: 1、采用Notepad将一个一个文件打开并另存为UTF8格式; 2、将含有中文字符的变量名称重新修改; 3、将#pragma once改成宏定义的形式防止多重引用; 4、将...

linux 到windows平台c++工程移植(持续更新)

近日在将一段linux下编译运行没有问题的代码移植到win7 + VS2010 +x64 平台时遇到了很多问题,做如下记录。 getline函数在不同的OS下以不同的符号作为字符串的末尾,于是会产生诸...

项目迁移 windows到linux

Sigar - no libsigar-amd64-linux.so in java.library.path

Windows下程序向Linux下移植细节

【摘要】 根据zxms80项目的会议调度模块移植的经验,本文提出了Windows平台上程序向Linux下移植所碰到的一些典型问题,并举例给出了相应的解决方法,文中还描述了使用pwlib库时mak...
  • weiqubo
  • weiqubo
  • 2013年11月04日 12:35
  • 2062

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

一.前言  Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的。Windows平台根本无法直接利用这些源代码资源。如果想要使用完整的代码,就要做移植工作。因为C/...
  • tjnew
  • tjnew
  • 2006年07月07日 17:59
  • 1138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈如何将linux上的程序移植到windows上
举报原因:
原因补充:

(最多只允许输入30个字)