【基本概念1】编译、构建、调试

您所在的位置:网站首页 Keil编译器5和6有什么区别 【基本概念1】编译、构建、调试

【基本概念1】编译、构建、调试

2024-07-12 08:37| 来源: 网络整理| 查看: 265

一、编译型语言与解释型语言

计算机只能识别由0、1组成的二进制代码,称为机器码。所以我们现在使用高级编程语言编写的程序就需要一个翻译过程,将其转换成计算机认识的二进制代码,而这个翻译过程就是由编译器(Compiler)或者解释器(Interpreter)完成的。采用编译器进行翻译的语言被称为编译型语言,而采用解释器进行翻译的语言被称为解释型语言。 在这里插入图片描述

1.1 编译型语言(代表:C、C++、汇编语言)

对于编译型语言,编写完成后,编译器将所有的源代码转换成包含机器码可执行程序(比如WIn系统下的.exe程序),便可直接运行。之后便可以随时运行这个可执行程序而不用再次编译,所谓“一次编译,无限次运行”。

但编译型语言有一个明显的弊端,就是生成的可执行程序无法跨平台运行。所谓跨平台意为在Win系统下生成的可执行程序.exe无法在Mac/Linux等其他系统下运行。有些情况下甚至源代码在不同平台下的含义也不一样,比如C语言的long整型变量在Win与Linux下占用的字节数就不同。总的来讲编译型语言的移植性较差,但由于其不需要每次执行的时候都编译,所以执行速度快。

1.2 解释型语言(代表:Python、JavaScript、PHP、Shell)

对于解释型语言,每次执行程序都需要一边翻译一边执行,用到哪些源代码解释器就将其转换成机器码,没用到的就不进行翻译。由于每次执行都要进行编译,所以解释型语言的效率低于编译型语言,甚至是数量级的差距。因此一般计算机的底层功能、关键算法或者嵌入式程序都由编译型语言开发、而一些应用软件、网站、小工具才使用解释型语言开发。

解释型语言最大的优点便是跨平台性。只要我们在不同的平台安装了对应的解释器,同一段代码便可在各个平台运行,所谓“一次编写、到处运行”。注意这里各个平台的解释器本质上是可执行文件,无法跨平台,跨平台的是源代码,不是解释器本身。

比如大名鼎鼎的python,现在就可以在Linux、Windows、MacOS、Android、FreeBSD等平台上运行,可移植性很强。

1.3 半编译半解释型语言(代表:Java、C#)

这类语言的编译器首先将源代码转换成一种中间文件(字节码文件),然后再将这种中间文件拿到专门的虚拟机中执行(如Java的JVM)。这样兼顾了运行效率以及跨平台性,字节码文件是可以在不同平台的虚拟机上运行的。

编译型语言解释型语言半编译半解释型语言优点编译一次后,脱离了编译器也可以运行;运行效率高跨平台性好,同样的源代码可以在不同的平台上运行编译后生成的字节码文件可跨平台运行,效率高于解释型语言缺点可移植性差,可执行文件不能跨平台使用一边执行一边转换,执行效率低效率仍低于编译型语言 二、编译与构建 编译(compile):指将源代码翻译为机器码的过程构建(build):指包括编译在内的一系列处理过程。在大型工程中,构建涵盖了对源代码的编译、对库文件的链接,还有可能包含映像文件打包等其它附加操作。 2.1 C/C++常用编译器 2.1.1 桌面操作系统 MSVC (Microsoft Visual C/C++)编译器:由微软开发,用于Windows系统下C/C++编译GCC(GNU Compiler Collection,GNU编译器套件):GNU是在Linux上运行的一种自由的操作系统,基于此衍生出了许多工具。GCC是一套支持C、C++、Fortan、Pascal等语言的编译器套件,运行在Linux系统下。当然GCC现在也可用于Windows系统, MinGW (Minimalist GNU for Windows)提供了一套简单方便的Windows下的基于GCC 程序开发环境。后来经过区分,一般把针对C语言的编译器称为gcc、而把针对C++的编译器称为g++。LLVM Clang编译器:Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。更进一步来说,Clang只是一个编译器前端,其将上述的C类语言编译成一种“汇编语言(中间语言)”。接着,通过LLVM(Low Level Virtual Machine)作为后端,将这种“汇编语言”编译成针对不同机器的二进制机器语言。可在macOS、Linux、Windows等平台使用 2.1.2 嵌入式系统

Keil编译器:Keil既是一个公司的名字也是一款IDE软件的名字,现被ARM收购。Keil软件包括MDK-ARM、C51、C166、C251四种单片机的编译器以及其他工具,其中MDK-ARM意为ARM相关的开发工具(Microcontroller Development Kit)。目前Keil采用的编译器都是需要收费的,支持Win与Linux系统。 在这里插入图片描述

GCC:GCC作为一款免费的编译器,也支持许多单片机系统的编译,包括GCC for ARM、AVR GCC等。一般来讲除了Keil软件,其它的开发方式大多采用GCC作为编译器,支持Win、Linux与macOS系统。

IAR编译器:IAR Systems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年瑞典,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境(IDE)、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。一般来讲IAR的编译器只有使用IAR的IDE开发时才会用到,仅支持Win系统。 在这里插入图片描述

DSP设计商TI(Texas Instruments,德州仪器)的CCS(Code Composer Studio)。 在这里插入图片描述

DSP设计商ADI(Analog Device, Inc. 亚德诺半导体)的Visual DSP++。 在这里插入图片描述 总的来讲嵌入式系统由于性能、内存十分有限,所以能支持的编译器功能也较少。

2.2 C/C++程序的构建

除了hello world这样简单的程序,大多的C/C++程序都是由多个源文件编译链接而成的,这些源文件的处理步骤一般通过makefile文件管理,以实现“自动化编译”。写好了源代码以及makefile后,通过make命令便可对整个工程完成自动编译,提升了开发效率。make是一个解释makefile指令的工具,一般的IDE都带有这个指令,也可以自行安装。

当然makefile的编写还是有一定的难度,为了进一步增加开发效率,诞生了许多makefile生成工具,其中有名的包括cmake、xmake等工具。网上有一张cmake与xmake的对比图如下: 在这里插入图片描述

三、C/C++chang常用调试器

调试(Debug)是指通过调试器(Debugger)跟踪程序的运行过程,发现程序中的逻辑错误以及缺陷等问题。在调试过程中,我们可以监控程序的每一个细节,包括变量值、线程调度、内存情况等。一般的IDE都会自带调试器,目前常见的调试器列举如下:

Remote Debugger:VC/VS自带的调试器,由微软开发,与IDE紧密衔接,使用方便。WinDbg:由微软开发的Windows系统下轻量级的调试器,功能齐全,但指令较为复杂。LLDB:XCode自带的调试器,用于macOS系统下的开发。GDB(GNU symbolic debugger):与编译器GCC同宗同源,最早用于Linux系统下的调试,现也能移植于WIndows与macOS系统。 总结

本文介绍了一些关于编译、构建、调试的基础概念以及一些常用的C/C++编译器与调试器。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3