MinGW & CygWin、mingw64-gcc & cygwin-gcc区别

MinGW 与 CygWin 都能让你在 windows 下编译 unix 风格的 C/C++ 代码。

MinGW 与 CygWin 的区别

小标题是参考网址((

Back to Windows With WSL or CygWin ?
  1. MinGW:修改编译器,让 windows 下的编译器把诸如 fork 的调用翻译成等价的形式。
  2. CygWin:修改库,让 windows 提供一个类似 unix 提供的库,他们对程序的接口如同 unix 一样,而这些库当然是由 win32 的 API 实现的。

最大区别在于:使用 CygWin 可以在 windows 下调用 unix-like 的 API (如fork、spawn、signals、select、sockets 等)。但是如果调用了 unix 特有的 API 函数,在 windows 环境下不能正常运行,如果想在 windows 下正常运行的,就必须依赖 cygwin1.dll,速度上会有些影响;而用 MinGW 编译出来的程序,如果源代码里面调用了 unix 环境的 API,则 MinGW 会把这些对 UNIX 的 API 调用翻译成 win32 下等价的形式。同时这个程序是不能在 windows 下运行的。

如果你是想在 windows 环境下开发 linux 运行程序,那么 CygWin 是你的不二之选。而如果你想开发的是 windows 运行程序,并且追求速度,那么二者相比而言,MinGW 是更好的选择。

Cygwin 和MinGW 的区别与联系是怎样的?

区别:Cygwin是模拟 POSIX 系统,源码移植 Linux 应用到 Windows 下;MinGW 是用于开发 Windows 应用的开发环境。
联系:均提供了部分 Linux 下的应用,多跑在 Windows 上;MinGW 作为 Cygwin 下的软件包,可以在 Cygwin 上运行。

  • 如果程序只用到C/C++ 标准库,可以用MinGW 或Cygwin 编译。

  • 如果程序还用到了POSIX API,则只能用Cygwin 编译。

  • 程序经MinGW 编译后可以直接在Windows 上面运行。

  • 程序经Cygwin 编译后运行,需要依赖安装时附带的cygwin1.dll。

API? 参考百度百科

API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

Windows API
API函数包含在Windows系统目录下的动态连接库文件中。Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。这在某种程度上很像Windows的天然代码。而其他的语言只是提供一种能自动而且更容易的访问API的方法。当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体,VB获取这个调用并经过分析后生成一个特定事件。
更易理解来说:Windows系统除了协调应用程序的执行、内存的分配、系统资源的管理外,同时他也是一个很大的服务中心。调用这个服务中心的各种服务(每一种服务就是一个函数)可以帮助应用程序达到开启视窗、描绘图形和使用周边设备等目的,由于这些函数服务的对象是应用程序,所以称之为Application Programming Interface,简称API 函数。WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。
凡是在 Windows工作环境底下执行的应用程序,都可以调用Windows API。

linux API
在linux中,用户编程接口API遵循了UNIX中最流行的应用编程界面标准—POSIX标准。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。该标准基于当时现有的UNIX实践和经验,描述了操作系统的系统调用编程接口API,用于保证应用程序可以在源程序一级上在多种操作系统上移植运行。这些系统调用编程接口主要是通过C库(LIBC)来实现的。

这个世界上只有两种操作系统,符合 posix 协议的,和 Windows 。如这个笑话所说的,如果你想要开发 Windows 程序,需要选择 win32 ,而开发 Linux、Unix、Mac OS 等其他操作系统下的程序,则需要选择 posix 。


cygwin编译器选择

cygwin不止提供一种c / c++编译器,其中 gcc-core、gcc-g++ 是以经 Cygwin1.dll 将 Windows 的 API 封装转换成 Linux 下 API 调用格式(即符合 POSIX 标准)的 C/C++ 编译器,而 mingw64-x86_64-gcc-core 和 mingw64-x86_64-gcc-g++ 是原生的支持 win32API 的编译器(Cygwin 中所使用的 mingw64 编译器是gcc官网中的 mingw-w64 项目)( mingw64-x86_64 开头的包都是为生成可运行于 windows 原生接口下的程序的工具)

涉及到 win32API 的程序使用 mingw64 的编译器理论上比 gcc 要快些,因为 mingw64 编译是不需要调用 Cygwin1.dll 的转换的

mingw64-gcc编译器使用

在需要使用 mingw64 版本的编译器时一般需要一些程序运行时的动态链接库,而这些 dll 文件并没有放在 Cygwin\bin 文件夹,而是放在了 X:\Cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin 文件夹下,一般包括 libstdc+±6.dll(GCC 的 C++ 标准库实现),libgcc_s_seh-1.dll(C++异常处理实现)和 libwinpthread-1.dll(C++ thread线程库) 等 C++ 在 Windows 下常用库的实现,这个目录如果使用 mingw64 编译时一定要添加到环境变量中。

在 X:\Cygwin\Cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\ 文件夹下有如下文件夹(应该与单独安装 mingw-w64 或 minGW 编译器类似):

bin : 用于存放可执行文件(通过包管理安装等),以及一些动态链接库(二进制)文件
etc : 自行安装或非系统主要的配置文件目录
include : 编写系统调用或者 C/C++ 标准库以及一些第三方库所需头文件
lib : 编写 C/C++ 程序的标准库或第三方库或系统调用必要的一些静态链接库文件
libexec : 目录下存放一些函数库、执行文件及连接文件
share : 独立与你计算机结构的数据,譬如,字典中的词。
ssl : ssl 连接的相关配置文件

在你安装基于mingw-w64 或 minGW(被 w64 兼容) 的第三方库时需要将第三方库的头文件、动态链接库文件以及静态链接库文件分别拷贝到如上的 include 、bin 和 lib 文件夹下,并且保证 X:\Cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\ 文件夹被加入到系统变量中,另外,使用 Makefile 编译时需要使用 -L -l 参数手动将第三方库实现文件进行链接。

(这么写了,然后接着用posix标准的gcc)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误提示表明你当前的系统中没有安装 `arm-linux-gnueabi-gcc` 编译器。 如果你是在 Ubuntu 或者 Debian 系统中,可以通过以下命令安装: ``` sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabi ``` 如果你使用的是其他 Linux 发行版,你需要搜索该发行版的软件仓库来找到对应的安装命令。 如果你是在 Windows 系统中,则需要安装适用于 Windows 的 `arm-linux-gnueabi-gcc` 编译器。你可以在网络上搜索相关的编译器并进行安装。或者你可以使用类 Unix 环境的工具链,如 CygwinMinGW 来进行交叉编译。 ### 回答2: "arm-linux-gnueabi-gcc command not found" 这个错误是由于系统中没有找到 arm-linux-gnueabi-gcc 编译器导致的。 arm-linux-gnueabi-gcc 是一个特定的 ARM 架构交叉编译器,用于编译针对 ARM 架构的程序。如果你在 Linux 系统上遇到了这个错误,说明你的系统中没有安装相应的交叉编译器。 要解决这个问题,你可以通过以下两种方式之一来安装 arm-linux-gnueabi-gcc: 1. 从软件包管理器中安装:首先,打开终端并运行适用于你的 Linux 发行版的包管理器命令(如 apt-get,yum,dnf 等)。然后使用命令搜索 arm-linux-gnueabi-gcc,安装相应的软件包。例如,在 Ubuntu 上,你可以运行以下命令进行安装: ``` sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabi ``` 2. 手动编译和安装:如果你无法通过包管理器安装 arm-linux-gnueabi-gcc,你可以尝试手动编译和安装。首先,下载 GNU 工具链中最新版本的 arm-linux-gnueabi-gcc。然后,解压下载的文件,并按照其中的说明进行编译和安装。 无论你选择的方法是哪一个,安装成功后,你应该能够在终端中通过输入 arm-linux-gnueabi-gcc 命令来验证安装是否成功。 ### 回答3: "arm-linux-gnueabi-gcc command not found"这个错误是由于您的系统上缺少了arm-linux-gnueabi-gcc编译器所引起的。 该编译器是用于交叉编译ARM架构的程序的。它将源代码编译成在ARM处理器上运行的可执行文件。 要解决这个问题,您可以按照以下步骤进行操作: 1. 确定您是否已经安装了arm-linux-gnueabi-gcc。您可以在终端中使用命令"which arm-linux-gnueabi-gcc"来检查是否已安装。如果未安装,可以进行下一步。 2. 打开终端并运行以下命令来安装arm-linux-gnueabi-gcc: sudo apt-get install gcc-arm-linux-gnueabi 3. 如果上一步中的命令无法找到软件包,您可能需要先更新软件包列表: sudo apt-get update 4. 在安装过程中,您可能需要提供管理员密码以确认安装。 5. 安装完成后,您可以再次运行"which arm-linux-gnueabi-gcc"来确认已安装成功。如果成功安装,则应该能够看到该编译器的路径。 如果您无法通过包管理器安装arm-linux-gnueabi-gcc,也可以尝试从官方网站下载适用于您的系统的安装包,并按照其提供的说明进行安装。 希望以上解答对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值