首页 > 系统相关 >Linux 开发环境搭建与使用——Linux 编译器之 GCC

Linux 开发环境搭建与使用——Linux 编译器之 GCC

时间:2022-09-28 21:42:33浏览次数:57  
标签:文件 GCC gcc 预处理 编译 编译器 Linux hello


​上一节我们学习了 vim 编辑器​​,接下来我们一起学习 gcc 编译器,这里,我们要区分编辑器和编译器有何不同?


编辑器是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行


编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。


GCC(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。GCC 原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如 Linux、BSD、Mac OS X 等)采纳为标准的编译器,GCC 同样适用于微软的 Windows。

GCC 最初用于编译 C 语言,随着项目的发展 GCC 已经成为了能够编译 C、C++、Java、Ada、fortran、Object C、Object C++、Go 语言的编译器大家族。


这里只是简单介绍如何编译 C 程序或者 C++ 程序最终成为一个可执行程序。


gcc识别的文件扩展名如下:

.c C 语言文件

.i 预处理后的 C 语言文件

.C、.cc、.cp、.cpp、.c++、.cxx C++语言文件

.ii 预处理后的 C++ 语言文件

.S 汇编文件(用户自己新建的汇编文件)

.s 预处理后的汇编文件

.o 编译后的目标文件

.a 目标文件的静态链接库(链接时使用)

.so 目标文件的动态链接库(链接、运行时使用)


gcc 和 g++ 编译器的编译过程

1、预处理

2、编译

3、汇编

4、链接

Linux 开发环境搭建与使用——Linux 编译器之 GCC_编译器


gcc 常用编译应用实例

分步编译

1)gcc -E hello.c -o hello.i

2)gcc -S hello.i -o hello.s

3)gcc -c hello.s -o hello.o

4)gcc    hello.o -o hello_elf


编译选项说明:

-o file 指定生成的输出文件名为 file

-E 只进行预处理

-S 只进行预处理和编译

-c 只进行预处理、编译和汇编


文件名后缀说明:

.c C 语言文件

.i 预处理后的 C 语言文件


.s 预处理后的汇编文件


.o 编译后的目标文件

Linux 开发环境搭建与使用——Linux 编译器之 GCC_预处理_02


程序编译成功后,通过“./”运行这个可执行程序。


常用编译(还是经过:预处理、编译、汇编、链接的过程):


gcc hello.c -o demo

Linux 开发环境搭建与使用——Linux 编译器之 GCC_c++_03


如果是 C++ 代码,只需改用 g++ 编译器即可。


如果没有 g++ 编译器,在线安装即可:

Linux 开发环境搭建与使用——Linux 编译器之 GCC_预处理_04


使用 g++ 编译 c++ 程序:

Linux 开发环境搭建与使用——Linux 编译器之 GCC_预处理_05


gcc、g++ 编译的其它一些选项

-v

Linux 开发环境搭建与使用——Linux 编译器之 GCC_c++_06


-Wall 生成所有级别的警告信息
-w 关闭所有警告,建议不使用此选项

Linux 开发环境搭建与使用——Linux 编译器之 GCC_预处理_07

-Idir 将dir目录加入头文件搜索目录列表,优先在dir目录中查找包含的头文件

-Ldir 将dir目录加入库文件目录列表,优先在dir目录中查找库文件

-lname 链接库为name的库

-static 链接时使用静态库

-shared


标签:文件,GCC,gcc,预处理,编译,编译器,Linux,hello
From: https://blog.51cto.com/u_3002289/5720944

相关文章

  • Linux 开发环境搭建与使用——Linux 常用编辑器之vim
    概述vi编辑器是Linux系统中最常用的文本编辑器,vi在Linux界有编辑器之神的美誉几乎所有的Linux发行版中都包含vi程序。vi工作在字符模式下,不需要图形界面,非常适合......
  • Linux 网络编程——原始套接字实例:MAC 地址扫描器
    如果A(192.168.1.1)向B(192.168.1.2)发送一个数据包,那么需要的条件有ip、port、使用的协议(TCP/UDP)之外还需要MAC地址,因为在以太网数据包中MAC地址是必须要有的。那么......
  • Linux 网络编程——IP 数据报格式详解
    IP数据报首部TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IPDatagram)。这是一个与硬件无关的虚拟包,由首部和数据两部分组成。首部的前一部分是固定长度,共2......
  • Linux 网络编程—— libpcap 详解
    概述libpcap是一个网络数据包捕获函数库,功能非常强大,Linux下著名的tcpdump就是以它为基础的。libpcap主要的作用1)捕获各种数据包,列如:网络流量统计。2)过滤网络数据包,列如......
  • Linux 网络编程——TCP 和 UDP 数据报格式详解
    TCP报文格式TCP(TransmissionControlProtocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP报文段的报头有10个必需的字段和1个可选字段......
  • Linux网络编程——原始套接字实例:MAC 头部报文分析
    ​​通过《Linux网络编程——原始套接字编程》得知​​,我们可以通过原始套接字以及 recvfrom()可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢?MAC头......
  • Linux系统编程——线程同步与互斥:互斥锁
    为什么需要互斥锁?在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在......
  • Linux系统编程——进程间通信:消息队列
    概述消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法,其特点如下:1)消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息......
  • Linux系统编程——进程间通信:管道(pipe)
    管道的概述管道也叫无名管道,它是是UNIX系统IPC(进程间通信)的最古老形式,所有的UNIX系统都支持这种通信机制。无名管道有如下特点:1、半双工,数据在同一时刻只能在一个方向......
  • Linux高级网络开发奇妙之旅
    一、基础理论篇​​01、网络协议入门​​​​02、LAN、WAN、WLAN、VLAN和VPN的区别​​​​03、IP地址介绍​​​​04、广播地址介绍​​​​05、无连接和面向连接协议......