Windows、Linux下“交叉”编译环境的搭建和测试。

本文介绍了如何在Windows和Linux环境下搭建交叉编译环境,使用cygwin在Windows上模拟Linux开发,以及利用winegcc在Linux下编译Windows程序。通过实例展示了从Linux编译出可在Windows运行的程序,详细阐述了环境配置和测试过程。
摘要由CSDN通过智能技术生成

  开源给了我们极大的便利,使得我们能够有众多优秀的工具可以使用。

 

  作为Windows(R)下的程序开发者,经典的开发环境Microsoft Visual Studio一直是众多开发环境中及其流行的产品,——且不讨论大家使用的是否是真正经过微软授权的正版开发环境,我们无法否认VS的普及程度。

 

  而进行过Linux开发的程序员必定会对gcc的强大功能所震撼,——在Linux下的经典开发环境不是所谓的IDE,尽管IDE环境也数不胜数,但是使用commandline上的VI(VIM)/Emacs + gcc + GNUmake + gdb (+ autotools)的搭配却无可辩驳的成为Linux下产出最多的开发环境,感谢GNU项目等。

 

  开源社区正因为这些强有力的工具,成就了众多使得我们目瞪口呆的优秀作品。

 

  cygwin便是其中相当出众的一个项目。

 

  cygwin是在Windows下模拟Linux开发的及其成功的一个项目。首先我们可以想当然的认为,只要gcc等可以被移植到Windows下,那么几乎所有GNU工具就都可以移植到Windows下,——我们确实有对应的Windows版本的gcc,可是,仍然有些东西是不能直接移植到Windows下的,因为毕竟Linux不同于Windows,系统核心不同,底层细节不同,甚至没有多少相同或者类似的实现,尽管KDE3.5酷似XP,KDE4也像极了Vista。

 

  但是,cygwin使得这都变得不再重要,——将Linux的底层用Windows的底层实现,封装了众多DLL,从而将这种貌似不可能的事情变得及其简单,甚至源码包可以同在Linux下一样,./configure, make, make install,只要念三个咒,程序就装在cygwin下了。——这时候,我们得到的是“准”Windows应用程序,标准的、带有Windows经典PE文件头,可以在cmd下执行,可以通过鼠标双击运行……只是它的执行必须依赖于cygwin的一系列DLL而已。

 

  目前看来,这似乎是尽管可能不是唯一却一定是最流行的在Windows下进行Linux程序开发的途径,——只要在cygwin下可以make成功,那么,在所有兼容POSIX标准的UNIX上,不论BSDMac XSun Solaris,还是日渐流行的各种发行版的Linux,包括LinuxLiveCD,几乎都可以保证编译通过。

 

  这样,尽管我们还没有从Windows下直接生成可以在Linux下执行的可执行二进制文件,但是一般来说得到没有问题的源码已经可以了……

 

  上面讨论的是Windows下进行Linux开发,虽然有些不太靠谱,但是事实是,似乎就只是这样了;下面我们讨论我写这个东东的主要目的,——在Linux下进行Windows应用程序开发。

 

  使用虚拟机的方案已经被大家抛弃了,——如果只是这么简单,我似乎也没有写这个东东的必要了,而且,虚拟机毕竟达不到很快的,除非您的机器配置相当不错,比如流畅跑个虚拟的盗版Vista。

 

  但是不用怕,不用虚拟机照样可以做Windows应用程序开发,因为我们用的是开源的Linux,开源的GNU工具,因为我们有无所不能的巨牛的gcc。

 

  直接使用gcc的方式,不好意思,我还没试,所以就不乱说了……那么我们能用什么呢?

 

  Linux用户应该都知道有这么一个东东,号称可以将大多数Windows的二进制应用程序直接“移植到”Linux下使用,——对,这就是大名鼎鼎的wine。作为一个开发者,光知道有个wine可以用还是不够的,你要知道,我们还有个将gcc进行相关包装的winegcc

 

  winegcc的目标号称是将Windows下的程序源码尽量保持兼容的在Linux下编译通过,并生成可以在wine下执行的应用程序,——这个目标是基本可以实现的,至少我的测试是,使用Windows API的应用程序完全可以编译通过,而且生成的应用程序和Windows下的程序看上去没有什么大的差别,——当然,我的测试仅针对C程序,C++和MFC的程序没有进行测试,所以不知道是什么效果。

 

  这就很清楚了。winegcc可以编译Windows程序,但是由于使用的是winegcc相关的库,所以生成的程序尽管可以在wine中正常使用,但是将其直接搬到Windows下,将生成的.exe.so二进制文件改名为.exe后,仍然无法正常执行,——毕竟程序需要的环境已经变了。在WindowsNT的cmd下,装入程序时提示:Program too big to fit in memory,可见程序实际上已经是Windows应用程序了(虽然看上去是16位程序的文件头),只是,不算是完全的Windows应用程序。

 

  到目前这个阶段,我们已经基本达到了同Windows下使用cygwin时相似的效果,——在Linux下可以得到基本上能够移植到Windows下的程序的源码,尽管没有直接得到应用程序。这样的效果也还是可以接受的,毕竟Windows下进行“准”Linux应用程序开发时也遇到了类似的情况。

 

  当然,我们不会满足于这中源码的交叉移植,毕竟Linux环境下这么多巨牛的软件,以及Linux下"Nothing's impossible"的大众想法,我们一定可以得到直接可以运行在Windows下的程序,从Linux中编译。——因为我们有wine,以及更重要的,Linux下可以有很多使我们的工作简化的优秀工具,比如VIM(当然也有Windows版), GNUmake, sed, awk, grep...等等,不一而足。

 

  下面是我实现的环境:操作系统:Knoppix5.3 LiveCD/DVD(这是开销最小的解决方案,毕竟我没有权限给别人的机器装一个他不会用到的系统),该Live Linux自带KDE3.5,wine0.9等工具,一般的开发基本没有问题(这是一款仅提供Live服务的Linux发行版,德国制造,基本没有汉语环境,提供各种工具,号称DVD版提供多达10G以上应用程序,常见的流行程序几乎全面囊括,如gcc, gdb, GNUmake, GVIM, Emacs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值