在cygwin下使用GCC生成的可执行文件

gol*_*ean 15 gcc cygwin

我正在使用Cygwin并将GCC(版本4.3.4 20090804(发布)1)安装为Cygwin包.

当我在Cygwin shell下使用GCC构建C代码时,生成的可执行输出文件是类型的可执行文件(用于MS Windows(控制台)Intel 80386 32位的PE32可执行文件)并且它只能在Cygwin shell下执行/运行,而不是Windows shell /命令提示符下的独立.exe.如果我尝试在Windows命令提示符下独立运行它,它会给出一个错误窗口,说"程序无法运行,因为你的计算机缺少cygwin.dll".

  1. 怎样才能使这个.exe独立,可以在任何其他系统的命令提示符上执行,甚至可以在我自己的系统中执行?

  2. 我认为Cygwin下的GCC会构建一个Linux可执行文件(ELF 32位LSB可执行文件),但事实并非如此.如何使用gcc-cygwin组合生成*.out类型的Linux可执行文件?

  3. 另外,我无法运行在Linux-gcc组合上生成的Linux可执行文件,以便在Cygwin下执行.

任何指针都会有所帮助.

ak2*_*ak2 14

尽管有大量传言,但Cygwin并不是Linux模拟器,即它不会生成或运行Linux可执行文件.为此,您需要一台虚拟机或coLinux.

相反,Cygwin是一个兼容层,旨在尽可能多地实现Windows中的POSIX和Linux API.这意味着程序必须专门为Cygwin编译,但它也意味着它更好地与Windows集成,例如它允许您在同一程序中混合POSIX和Windows API.

这是cygwin1.dll提供的兼容性层.如果使用gcc-3的-mno-cygwin开关或其中一个MinGW编译器构建非Cygwin可执行文件,那么当然不能使用任何POSIX/Linux特定的API,并且任何此类调用都需要用Windows替换等价物.


Ric*_*lka 14

Cygwin是一个仿真层.它允许UNIX代码在Windows上运行,如果您编译它以使用仿真层.对于Windows,它看起来像任何普通的DLL,并使OS调用正常.但是当你对它进行编译时,它显示的功能与UNIX相同(从技术上来说,它是POSIX,但它是UNIX)

1)当你使用cygwin构建时,它会自动引入这个cygwin1.dll.这是使它看起来像UNIX所需的代码.有一些标志使它不使用这个cygwin dll,意味着忽略UNIX的东西并使用本机Windows调用.该-mno-cygwin标志将使二进制文件成为本机Windows二进制文件,而不是使用cygwin模拟.正如其他人所说,你还需要-mwindows使用cygwin gcc制作实际的GUI应用程序.

2)要在一个平台上编译以在另一个平台上运行,您需要所谓的交叉编译器.您还需要其他系统的库和标头.根据您的需要,您需要一个cygwin-Linux交叉编译器,Linux头文件和库.在虚拟机中运行Linux可能要比设置它容易得多.

3)请记住,Cygwin看起来像UNIX到UNIX source代码,而不是Linux二进制文件.一旦编译完成,函数调用就是windows DLL调用.一个cygwin程序仍然是一个Windows程序(这就是为什么你需要一个Windows风格的DLL来运行它).Cygwin为UNIX函数/系统调用提供代码,例如fork(),但即使调用它们的方法现在也不同.fork()现在调用Windows DLL而不是Linux内核.它仍然是一个非常不同的系统.