总所周知,cygwin只是linux、unix在window下的一个模拟环境。其中cygwin下的一个重要组件cygwin1.dll提供了window下感觉linux的一个posix接口。说白了,在window下只能使用linux下一些与硬件无关的命令,如ls、pwd等,因为他们都在cygwin1.的dll中实现了,但是与平台相关的函数就没有办法啦,例如iptables命令。iptables命令在cygwin下无法使用。
有时候在做平台移植的时候,例如一个linux下的一个程序移植到window下,使用cygwin可以帮助我们省好多精力。但是问题也随之而来,如果你的程序中包含于平台相关的数据结构,与平台先关的函数、或者与平台相关的库文件,在做移植的时候就会出现问题。
例如,一个linux程序A,在代码中使用了linux平台下的libpcap,相应的,在cygwin下做移植的时候,就需要用到winpcap,就需要在cygwin下安装winpcap库,但是cygwin是类linux环境,所以只能用.a或者.so文件,所以就需要把winpcap编程成cygwin可以识别的.a或者.so文件。
以后,在遇到与平台有关的linux程序移植到windows平台的时候,就需要把程序中所用到的库文件由linux版本换成window版本,而且需要的window版本不能是.,lib或者.dll
的形式,必须转或者cygwin所能识别的.a 或者.so版本。
ygwin的gcc编译器使用windows的dll文件一般的步骤是使用pexports或dumpbin程序导出dll的DEF文件
其中dumpbin导出的DEF文件需要手动修改,所以推荐使用pexports,做法如下&