快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
Cygwin-1.16
Vs2008
欢迎转载,但请保留作者信息
Cygwin是一个在windows下编译运行linux应用程序的平台,它由两部分组成。一个是核心的cygwin1.dll,这个dll以windows的api实现了Linux下的大部分API。另一个部分则是newlib,实际上就是glibc,它将调用cygwin1.dll中的实现,然后以glibc的形式呈现给用户使用。
这两部分的代码可以通过CVS在cygwin.com的服务器上获得。
Vs2008是一个不错的集成开发环境,如果能够将cygwin用vs2008编译,并使之与vs2008下的c runtime library协同工作,那么其产生的效益将是非常大的。大到什么程度,自己想去吧,呵呵!由于cygwin编译出来的程序最终要在windows下运行,最终也只能使用windows提供了服务,这就为cygwin在vs2008下的编译提供了可能。
因为cygwin最终提供的是glibc的api,而又希望它可以和vs2008的libc混合使用,那么分析glibc的代码就是首要的任务。
glibc主要可以分为应用型的函数和平台依赖型的函数,前者如字符串处理函数,后者如io函数。
对于前一类的处理比较简单,因为vc也提供了自己的一些同名同功能的函数,直接使用vc提供的函数即可,而对于那些vc没有提供了函数,如argz_*之类的,可以将它们看成是vc库函数的一种有益补充。
关于平台依赖型的函数就有点复杂,因为有些处理函数是重名的,比如fopen之类的,这个时候只能采取函数重命名的方法,在cygwin的名称中加上一个cyg_之类的前缀。
此外还有一个重要的问题:头文件的包含路径问题。如果希望同时使用cygwin和vc,那么同名头文件的包含就会引起相当的困扰。为此可以将cygwin中的头文件都加上一个比较长的路径,比如将
#include <stdio.h>
改为;
#include <cygwin/newlib/libc/include/stdio.h>
Cygwin的编译大致可以分为三步,首先生成libc.a的静态库,然后生成libm.a的静态库,最后生成cygwin.dll,好了,Let’s go………..