Cygwin在windows系统下编译Linux程序以及访问windows系统目录和软件

1. 前言

  Cygwin 是一个用于 Windows 的类 UNIX shell 环境。 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性;以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面。前一个组件是一个 Windows 动态链接库 (DLL)。后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的 UNIX 源代码编译的。它们合在一起提供大家熟悉的 UNIX 环境。
  Cygwin 使用 Windows 安装程序。Cygwin setup.exe 文件可以重新安装软件,可以添加、修改或升级 Cygwin 配置的组件。
  Cygwin的安装请看下面博文,这里不再详细描述了:

http://jingyan.baidu.com/article/200957619b0c30cb0621b478.html

  下面主要描述一下它在windows系统上如何运行windows系统中程序,以及如何编译linux系统生成的程序。

2. 编译linux程序

  当然,安装Cygwin的最大好处是,能够在手头没有安装linux系统情况下编译linux程序,例如执行makefile来编译程序并在windows系统上执行程序。
  首先,打开Cygwin程序,我的是64位“Cygwin64 Terminal”,然后看到类似如下界面:

      Cygwin在windows系统下编译Linux程序以及访问windows系统目录和软件_第1张图片

  然后查找自己的主目录echo $HOME,我的主目录HOME是如下:

Cygwin在windows系统下编译Linux程序以及访问windows系统目录和软件_第2张图片

  打开Cygwin安装目录,你就会看到安装目录下HOME目录所在:

    Cygwin在windows系统下编译Linux程序以及访问windows系统目录和软件_第3张图片
 
  我的主目录是在home下面的FX子目录,Cygwin 软件是将其安装目录作为虚拟 UNIX 系统的根目录。当你编译对应的程序时候,就可以将程序放置在主目录下面,这样就可以无需cd命令进入其它目录再编译程序。
  一样,我们在主目录下用文本编辑器写一个Test.cpp实现Hello World输出功能的程序:

#include
using namespace std;
int main()
{
    cout<<"Hello World!"<return 0;
}

  编译:

$ g++ Test.cpp
$ g++ -o Hello.o -cpp Test.cpp

  我们会发现前一句执行完成,目录下面会生成一个a.exe的可执行文件,很多人可能感觉好奇怪,为啥是windows的可执行文件扩展名?这里需要解释一下Linux下目标文件和可执行文件。
  Linux平台下,.o文件一般是通过编译的但还未链接的目标文件,.out文件一般都是经过相应的链接产生的可执行文件(linux下)。当然这是一般情况下人们这么设置,而真正的,在linux中 .o通常保存的是可执行代码 ,至于可执行文件则没有规定扩展名,用的是文件属性位来决定的是否可执行,在chmod中设置。所以可执行文件其实并没有一个规定的扩展名,只是依靠文件属性来区分。而Cygwin在该环境下只好生成和windows系统可执行文件扩展名相同的exe文件格式。
  后面一句就正常生成一个目标文件Hello.o文件在当前目录下,然后执行无论哪个文件都能正常输出“Hello World!”了。

./a
./Hello.o

  当然cmake和make就相似操作了,执行相应CmakeList和Makefile文件,其它命令和linux下一样,这里不再细说。

3. 访问windows系统下目录和软件

  正如上面说的,Cygwin 软件是将其安装目录作为虚拟 UNIX 系统的根目录。
  Cygwin 把安装目录中的子目录映射到 UNIX 目录。它以单独的卷的形式提供 Windows 驱动器,比如 /cygdrive/c。也就是说c盘主目录发生了一个映射关系的转变,由c: 转为/cygdrive/c,由此可以使用这样的虚拟路径启动 Windows 程序。例如打开IE浏览器,我们就可以执行下面的语句:

/cygwin/c/Program\ Files/Internet\ Explorer/iexplore.exe

  空格记得使用转义字符转义,不然执行语句认为空格是语句结束符“\0”。“\ ”表示空格。


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋

你可能感兴趣的:(Linux)