纯净、安全、绿色的下载网站

首页

当前位置:首页IT学院IT技术

C/C++编译器 推荐几款C/C++的编译器、编译环境(非常全面的比较)

  2021-06-06 我要评论
想了解推荐几款C/C++的编译器、编译环境(非常全面的比较)的相关内容吗在本文为您仔细讲解C/C++编译器的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C++编译器,编译环境下面大家一起来学习吧

C/C++编译器有哪些?

首先是如雷贯耳的这几位仁兄MSVC、GCC、Cygwin、MingW(Cygwin和MingW的英文发音)另外还有些小众和新秀像ICC(Intel C/C++ Compiler)、BCC(Borland C/C++ Compiler快销声匿迹了)、RVCT(ARM的汇编/C/C++编译器内置在ARM的IDE——RVDS中)、Pgi编译器……其实有一大串我们只要熟悉常用的最强大的几款就可以了

主流C/C++编译器|编译环境简介

MSVC

MSVC是微软Windows平台Visual Studio自带的C/C++编译器

优点:对Windows平台支持好编译快

缺点:对C++的新标准支持得少

GCC

GCC原名GNU C Compiler后来逐渐支持更多的语言编译(C++、Fortran、Pascal、Objective-C、Java、Ada、Go等)所以变成了GNU Compiler Collection(GNU编译器套装)是一套由GNU工程开发的支持多种编程语言的编译器GCC是自由软件发展过程中的著名例子由自由软件基金会以GPL协议发布是大多数类Unix(如Linux、BSD、Mac OS X等)的标准编译器而且适用于Windows(借助其他移植项目实现的比如MingW、Cygwin等)GCC支持多种计算机体系芯片如x86、ARM并已移植到其他多种硬件平台

优点:类Unix下的标准编译器支持众多语言支持交叉编译

缺点:默认不支持Windows需要第三方移植才可用于Windows

Cygwin

Cygwin是一个Windows下Unix-like模拟环境具体说就是Unix-like接口(OS API命令行)重定向层其目的是不修改软件源码仅重新编译就可以将Unix-like系统上的软件移植到Windows上(这个移植也许还算不上严格意义上的无缝移植)始于1995年最初作为Cygnus软件公司工程师Steve Chamberlain的一个项目

和GCC的关系:Cygwin是让Windows拥有Unix-like环境的软件而不是编译器GCC是安装在Cygwin上的编译器

优点:可以比MingW移植更多的软件到Windows上对Linux接口模拟比MingW全面

缺点:软件运行依赖cygwin1.dll速度受点影响

注意:Unix-like模拟环境不是Unix虚拟环境很多论述中都声称Cygwin是在Windows上尽可能模拟类Unix环境这容易造成误解好像类Unix的elf程序可以直接运行在安装了Cygwin的Windows上一样Cygwin和Wine的思路是不同的在Windows+Cygwin上你可以像类Unix那样使用命令行和编程但elf等非exe格式的程序是不能被Cygwin运行的所以Cygwin和Unix虚拟机、Wine是完全不同的叫Unix-like环境模拟非虚拟是有限的选择性的模拟请不要误解

MingW

MingW(Minimalist GNU on Windows)是一个Linux/Windows下的可以把软件源码中Unix-like OS API调用通过头文件翻译替换成相应的Windows API调用的编译环境其目的和Cygwin相同从而把Linux上的软件在不修改源码的情况下编译为可直接在Win下执行的exe

和GCC的关系:MingW是编译环境不是编译器GCC是MingW中的核心组成

优点:在Win下可以和Linux一样的方式编译C/C++源码可以说是Win版的GCC其生产的Windows PE程序相比Cygwin不依赖任何第三方库比Cygwin纯粹理论上也更快速

缺点:编译速度、编译出的程序在算法上可能都比MSVC慢

注意:与Windows下其它编译器不同的是MinGW与Linux下广泛使用的GNU近乎完全兼容这意味着在Linux下如何编译源代码在MinGW中也可以以完全相同的方式编译有些Linux下的开发人员(比如开源阵营)发布的源代码通常只提供Linux下的编译方式而不提供Windows下的编译方式(这可能与其不熟悉windows操作系统有关)但确实有不少用户需要在在Windows下编译使用此源代码这在种情况下如果Windows用户想用VC、BC等编译器编译该源代码必须重写Makefile(各种编译器所支持的Makefile不尽相同)工作量比较大不说还很难保证不出错MinGW的出现提供了两个平台下的“跨平台编译方案”MinGW与MSYS相配合连./configure都有了与GNU不同的是MinGW编译生成的是Windows下的可执行文件(.exe)或库文件(.dll,.lib)——不过编译过程中的的中间文件仍然是.o文件而不是.obj文件(这当然无所谓了中间文件嘛编译完成后就没有用了)

在我们对比Cygwin和MingW之前请先理清一件事那就是

如何从Unix-like系统向Windows系统移植软件?

现代操作系统包括Windows和Linux的基本设计概念像进程线程地址空间虚拟内存这些都大同小异二者之上的程序之所以不兼容主要是它们对这些功能具体实现上的差异:

首先是可执行文件的格式Window使用PE的格式并且要求以.EXE为后缀名Linux则使用Elf

其次操作系统API也同比如Windows用CreateProcess()创建进程而Unix-like系统则使用fork()其他还有很多诸如spawn、signals、select、sockets等

分析之后可知要把Unix-like系统上的软件移植到Windows上有几种思路:

第一种:修改软件源码并重新编译这个方法最笨类Unix下大量的软件要修改工作量很大编译生成目标平台可执行文件格式

第二种:不修改软件源码但把类Unix接口调用悄悄替换为WinAPI还是需要重新编译编译生成目标平台可执行文件格式

第三种无缝移植的运行环境无需重新编译在一种OS上建立另一中OS的应用软件虚拟环境(和虚拟机不一样)比如Wine(把Windows上的可执行程序直接原样移植到Linux上)

Cygwin和MingW的对比

作为编译环境时都依赖于GCC

用它们作编译环境、交叉编译根本上都是因为GCC编译器的支持它们做的工作是为GCC的编译扫除Unix-like、Windows间OS API的差异这个障碍

二者都必须重新编译后实现移植生成的程序都是PE格式

二者都不能让Linux下的程序直接运行在Windows上(无缝移植)必须通过源代码重新编译有些人声称cygwin支持rpm的压缩包注意rpm压缩包其实是src.rpm内部还是源码而非elf格式cygwin不支持常规rpm包的安装

Cygwin运行在Windows上MingW运行在Linux或者Windows上

Cygwin是Windows上运行的Unix-like环境MingW是运行在Linux或者Windows上的Windows PE编译环境

MingW中的子项目MSys和Cygwin更像

Cygwin除了全面模拟Linux的接口(命令行OS API)提供给运行在它上面的的Windows程序使用并提供了大量现成的软件更像是一个平台MingW也有一个叫MSys(Minimal SYStem)的子项目主要是提供了一个模拟Linux的Shell和一些基本的Linux工具因为编译一个大型程序光靠一个GCC是不够的还需要有Autoconf等工具来配置项目所以一般在Windows下编译ffmpeg等Linux下的大型项目都是通过Msys来完成的当然Msys只是一个辅助环境根本的工作还是MingW来做的

实现思路有同有异

Cygwin和MingW都是第二种软件移植思路当然二者还是有区别区别就在于“替换”方式Cygwin编译时程序依然以Linux的方式调用系统API只不过把Unix-like接口link到自己的cygwin1.dll上然后在cygwin1.dll中重新调用Windows APIcygwin1.dll再调用Windows对应的实现来把结果返回给程序也就是说他们基于Win32 API中写了一个Unix系统API的重定向层所以用它移植的软件都依赖于cygwin1.dllMingW编译时通过特有的WinAPI头文件把类Unix-like调用替换为WinAPI用它移植的软件无需依赖第三方库可直接运行在Windows平台为了达到类Unix软件仅通过重新编译移植到Win的目的Cygwin在运行时偷梁换柱MingW在编译时偷梁换柱

用一个PE格式查看工具检查一下就能发现Cygwin生成的程序依然有fork()这样的Linux系统调用但目标库是cygwin1而MingW生成的程序则全部使用从KERNEL32导出的标准Windows系统API

使用方式有同有异

把类Unix上的软件移植到Windows是二者的主要目标除此之外顺带的MingW和Cygwin都可以用来跨平台开发等等其他事情

Windows + Cygwin:可以在Windows上学习Linux命令还可以在Windows上做Linux软件的开发包括用GCC编译elf(交叉编译)

Linux + MingW:可以在Linux上做Windows软件的开发包括用GCC编译exe(交叉编译)

Windows/Linux + MingW:可以摆脱MSVC的“束缚”用GNU的自由软件来编译生成不依赖第三方库的纯粹Windows PE格式(exe)二进制程序

Cygwin重量级MingW轻量级

与MingW思路一致的两者相比Cygwin是重量级的(需下载50M以上直至数百兆不等安装后占用空间可达1G)MinGW是轻量级的(需下载的文件只有20M安装后70M左右)这是单纯从体积上说的另外Cygwin现在据说也不是完全免费的了

网络上的对比列表(UnxUtils自行无视仅供参考)

功能 UnxUtils MinGW Cygwin
设计原理 原生 原生 模拟
运行依赖 无依赖 依赖msys.dll(一定依赖它吗?值得验证) 依赖cygwin.dll
运行性能(比较) 最快 中等
DOS执行 可以 可以 不可以
更新速度 完善停止更新 较慢 基本同步gcc
shell命令 较多 较少 较多
uname WindowsNT MINGW32_NT-5.1 CYGWIN_NT-5.1
env 同Windows 同Windows 不完全同Windows
root C:/ C:/ /
home C:/Documents and Settings/test /home/test: No such file or directory /home/test
pwd C:/bin /usr/bin /home/test
df cannot read table of mounted filesystems /cygdrive/c
vi
gcc套件
开发库 WinAPI POSIX
图形库 GTK/QT GTK/QT
可移植性 Win32API不可移植 无缝移植
程序运行 原生 模拟
程序依赖 cygwin.dll
程序性能(比较) 较快(慢于VC和Linux下的gcc) 较慢(快于java)

小拓展

一个编译器编译时能否调用编译其他编译器产生的lib、dll?

不可以name***不同也就是名字混淆方式不同

15款最好的C/C++编译器和集成环境

编程语言有许多而且新的语言层出不穷但是C 和 C++作为历史悠久的两门语言久经考验仍然是晋级高手的必修语言它们有着许多卓越的特性更高效的功能和支持工具现在这两种语言依然那么活跃因为它们的 rubout 函数集提供了巨大的安全保障可靠性非常强

工欲善其事必先利其器今天我们介绍的是一些超级棒的 C 和 C++ 的集成开发环境(IDE)和编译器IDE 主要是在程序员开发时提供各种软件应用组件最受程序员受欢迎的 IDE 都有一个共同点那就是非常有吸引力的用户界面这里我们收集了一些最好的 C 和 C++ 的 IDEs 和编译器

1) kDevelop

Kdevelop 是 C/C++ 和其他语言的开源插件可扩展 IDE是基于 KDevPlatform KDevPlatform 是个开源程序集可以作为 IDE 的基础

KDevelop-Project 诞生于 1998 年其目的是为 KDE 提供一个易用的集成开发环境(Integrated Development Environment)此后KDevelop IDE 采用 GPL 进行发布 它支持很多程序设计语言

是一个用于 CC ++PythonJavaScript 和 PHP 的跨平台 IDE

官方网站:https://www.kdevelop.org/

2) Anjuta

Anjuta Devstudio 是另一个卓越的开发环境拥有很多超棒的功能包括项目管理应用程序向导交互式调试器源代码编辑器版本控制GUI 设计工具性能分析器等等这个 IDE 提供超强大的用户界面开发 C/C++ 程序的接口

Anjuta是一个建立在GNU/Linux下为C、C++提供编译的集成开发环境它最初旨在为GTK/GNOME设计并且自身具有很好的编程属性这其中包括项目管理、应用开发、交互调试以及强大的代码编辑和语法增彩的性质

Anjuta成为Gnome环境下最理想的开发工具其主要功能和KDE下的Kdevelop相似目前最新的版本是3.2.0

官方网站: http://anjuta.org/

3) Code Blocks

code block 是最流行的免费开源的集成环境之一这个 IDE 包括所有开发者需要的功能比如:高效的用户界面编译器和调试器等等

官方网站:https://www.codeblocks.org/

4) Visual Mingw

Visual-MigGW 是个极其抽象的开源 IDE它所有 Windows API 都变得极其简单可以进行快速开发它提供一个简化代码和获取 C++ 对象的模块提前准备好使用应用框架的环境

官方网站:http://visual-mingw.sourceforge.net/

5) Ideone

Ideone 是 C 和 C++ 的在线编译和调试工具支持其他的 60 种语言这个工具提供许多强大的功能允许程序员快速高效的编译源代码

官方网站:https://www.ideone.com/

6) Eclipse CDT

Eclipse CDT 是最权威也是最流行的 IDE提供超多高效的特性:支持项目创建和各种工具链的管理标准 make 构建源代码导航各种源知识工具有语法高亮显示功能的代码编辑器可视化的调试工具博阿奎内存寄存器和反汇编查看器

官方网站:http://www.eclipse.org/cdt/

7) Compilr

compiler 是个在线集成开发工具允许用户使用工具来编写代码和创建简单的用户界面此工具支持超级多的编程语言比如 CC++JavaHTML 等等

官方网站:https://www.crunchbase.com/organization/compilr

8) Code Lite

Code lite 是另一个超级棒的免费开源的 C 和 C++ 的 IDE可以在所有流行的平台上运行(WindowsOS XLinux 等)

官方网站:https://codelite.org/

9) Netbeans C++

Netbeans 工具包括大量的 C 和 C++ 的适用的项目类型模版可以使用动态和静态库去创建 C/C++ 应用它包括了一系列的特性得到了广大程序员的喜爱: Code assistance编译器配置单元测试source inspection远程开发和文件导航等等

官方网站:https://netbeans.apache.org/kb/docs/cnd/

编译器:

10) Dev C++

Dev C++ 是个全功能的 IDE有以下特性:1) 类查看器 2) 集成调试 3) 支持基于 GCC 的编译器 4) 项目管理 5) 编译器 6) 编辑和编译资源文件 7) 工具管理器 8) 函数列表

官方网站:https://bloodshed-dev-c.en.softonic.com/

11) Ultimate++

Ultimate++ 是个杰出的 C++ 开发框架这个 IDE 包括 C++ 编程的模块化概念可以使用GCCMinGW 和 Visual C++ 

官方网站:https://www.ultimatepp.org/

12) Digital Mars

DigitalMars 是个高性能的 C 和 C++ 的编译器包括许多很棒的特性比如最快的编译/链接 时间强大的优化技术关联设计完整的库资源HTML 可读文档反汇编程序库管理资源编译make 等等有命令行和 GUI 版本教程示例代码在线更新标准模版库和其他更多的功能

官方网站:

13) C-Free

C-Free是一款可支持多种编译器且专业化的C/C++集成开发环境(IDE)小伙伴们可以使用这款C-Free完成需要的编辑、运行、调试C/C++、编译等操作处理C-Free可以增强只能输入功能、添加语言加亮器、代码定位等功能

官方网站:http://www.programarts.com/cfree_ch/index.htm

14) MinGW

MinGW 编译器提供访问微软 C 运行时功能和一些特定语言的运行时

官方网站:http://www.mingw-w64.org/doku.php

15) Tiny C Compiler

Tiny c compiler 是最好的 C 语言编译器之一它有许多让开发者惊讶的功能可以在任何地方编译源代码可以使用任何 C 动态库可以直接编译和执行 C 源代码包括完整的 C 预处理器和 GNU 类的汇编程序

官方网站:https://bellard.org/tcc/


相关文章

猜您喜欢

  • Unity切割图集工具 Unity实现切割图集工具

    想了解Unity实现切割图集工具的相关内容吗再借你半生.在本文为您仔细讲解Unity切割图集工具的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Unity切割图集工具,Unity切割图集,Unity切割工具下面大家一起来学习吧..
  • C语言扫雷游戏 用C语言实现扫雷游戏

    想了解用C语言实现扫雷游戏的相关内容吗Enthusiastic_boy在本文为您仔细讲解C语言扫雷游戏的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C语言,扫雷下面大家一起来学习吧..

网友评论

Copyright 2022 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们