Linux:GCC安装与编译(详细)

article/2025/11/10 12:45:30

目录

1.gcc安装

2.gcc分布编译

(1)预编译(-E(大写):预处理指定的源文件,但是不进行编译)

(2)编译(-S(大写):编译执行的源文件,但是不进行汇编)

(3)汇编(-c(小写):编译,汇编指定的源文件,但是不进行链接)

(4)链接(-o:指定生成文件的文件名)

3.gcc一步编译

 4.编译后执行

 5.编译链接过程

6 .编译和链接的详细内容

6.1 预编译

6.2 编译

6.3汇编

6.4链接


1.gcc安装

命令:$sudo apt install gcc

2.gcc分布编译

为四个过程:预处理(预编译),编译,汇编,链接。(详细内容请看 6.编译和链接)

(1)预编译(-E(大写):预处理指定的源文件,但是不进行编译)

$gcc -E main.c -o main.i

(2)编译(-S(大写):编译执行的源文件,但是不进行汇编)

$gcc -S main.i -o main.s

(3)汇编(-c(小写):编译,汇编指定的源文件,但是不进行链接)

$gcc -c main.s -o main.o

(4)链接(-o:指定生成文件的文件名)

$gcc main.o -o main

3.gcc一步编译

命令如下: $gcc main.c

 

如果不给-o,系统会默认生成可执行文件a.out,如果想自定义最终生成的可执行文件的文件名,可以通 过-o: gcc main.c -o main

前三个步骤,可通过一行代码,直接将源文件变成目标文件“.o”:

 $gcc -c main.c

 4.编译后执行

在Linux中,通过路径+文件名的方式可以启动一个程序,这里的"./"可不 可以省略。

不加路径的话,系统将其看做一个命令, 而且并不是在我当前相对目录下找main或者a.out,而是默认直接去标准路径下找main和a.out,当然 找不到的话,就会报错,说在/usr/bin里面找不到对应的命令。

怎样像pwd,ls这些命令一样,不需要路径就可以执行呢?

可以将我们刚才生成的main和a.out放到/usr/bin里面,则这时 系统就可以找到了,就不会报错了,就可以像pwd,ls这些命令一样, 不需要路径也可以执行了。

 5.编译链接过程

6 .编译和链接的详细内容

6.1 预编译

首先是源代码文件“hello.c”和相关头文件,如stdio.h等被预编译器cpp预编译成一个“.i”文件。

命令:$gcc -E main.c -o main.i (-E只能进行预编译)。

预编译过程主要处理源代码文件中的以“#”开头的预编译指令,比如“#include”,“#define”等,

主要的处理规则如下:

(1)将所有“#define”删除,并且展开所有的宏定义。

(2)处理所有条件预编译指令,如“#if”,"#ifdef",“#else”

(3)处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。

(4)删除所有注释

(5)添加行号和文件名标识

(6)保留所有#pragma编译器指令

6.2 编译

编译过程就是将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生产相应的汇编代码文件

命令:$gcc -S main.i -o main.s

现在版本的GCC把预编译和编译两个步骤合并成为一个步骤,使用一个叫做cc1的程序来完成这两个步骤。实际上,gcc这个命令只是这些后台程序的包装,它会根据不同的参数去要求去调用预编译编译程序cc1、汇编器as、链接器ld。

编译过程一般分为6步:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化。

6.3汇编

汇编器是将汇编代码转变成机器可以执行的指令

命令:$gcc -c main.s -o main.o 

或者 : $as main.s -o main.o

或者使用gcc命令从C源代码文件开始,经过预编译、编译和汇编直接输出目标文件

$gcc -c main.c -o main.o

6.4链接

链接的主要内容就是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。

命令:$gcc main.o -o main

链接过程主要包括地址和空间分配、符号决议和重定位等这些步骤

:该内容来自《程序员的自我修养——链接、装载与库》 第二章编译和链接


http://chatgpt.dhexx.cn/article/7FD2FHLm.shtml

相关文章

Ubuntu下gcc安装及使用

 Ubuntu下gcc安装及使用 2016年06月21日 10:58:37 29486人阅读 评论(2) 收藏 举报 分类: Ubuntu(6) 作者同类文章 X 目录(?)[] 一安装二编译 在Ubuntu下安装GCC和其他一些Linux系统有点不一样。 一、安装 方法…

为你详解Linux安装GCC方法

下载: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/gcc-4.5.1.tar.bz2 浏览: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/ 查看Changes: http://gcc.gnu.org/gcc-4.5/changes.htm 现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前&am…

GCC安装入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

1.下载GCC安装包,下载地址如下,选择需要的安装版本: https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/2.解压配置 进入解压目录执行:./configure 可能会遇到下面的问题: configure: error: Building GCC requires GM…

gcc、g++安装

gcc与g安装 主要是在服务器进行gcc与g的安装 1、查看是否安装gcc gcc -v若有对应版本信息,即已经安装 2、安装gcc(若已经安装,跳过即可) # 安装gcc,默认的安装后的位置是/usr/bin,可以选择自己对应的…

Linux安装gcc的四种方法

相比于windows系统,Linux安装程序就比较复杂了,很多需要root用户才能安装。常见的有以下几种安装方法 源码安装 rpm包安装 yum安装 (RedHat、CentOS) apt-get安装 (debian,ubuntu) 源码安装…

gcc下载及安装教程

gcc下载及安装教程 作者:白鹿(花名) 注意:请提前获取root权限 1、gcc下载链接:http://ftp.gnu.org/gnu/gcc/gcc-5.1.0/ 2、解压相关下载压缩包(此处已提前下载,无需重复下载) tar…

Centos7.5 重启防火墙报错:network.service - LSB: Bring up/down networking

问题: 执行ip addr命令,没有显示出ip地址,并且防火墙重启报错:network.service - LSB: Bring up/down networking 解决办法: systemctl stop NetworkManager systemctl disable NetworkManager systemctl start ne…

Linux——重启防火墙时出现Failed to start firewalld.service: Unit is masked的解决办法

报错如下: 这是因为进程被锁住了。 对它进行解锁就可以了。 执行命令,即可实现取消服务的锁定# systemctl unmask firewalld 我们试一试 好了,现在防火墙已经重新启动了。 注:下次需要锁定该服务时可以输入以下命令行执行 #…

更改linux中的IP地址,关闭重启防火墙

1.查看所用的网卡信息,进行修改 2.修改对应网卡的相关参数 3.重启网卡 service network restart 4.关闭防火墙的两种方式 a.重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off b. 即时生效,重启后…

Linux关闭防火墙命令(永久关闭、暂时关闭、重启防火墙)

1:查看防火墙状态 systemctl status firewalldservice iptables status2:暂时关闭防火墙 systemctl stop firewalldservice iptables stop3:永久关闭防火墙 systemctl disable firewalldchkconfig iptables off已永久关闭状态: 4:重启防火墙 systemctl enab…

Linux命令查看和关闭重启防火墙命令

Linux命令查看和关闭防火墙 在外部访问CentOS中部署应用时,需要关闭防火墙。 1:进入/etc/init.d/目录,查看防火状态 cd /etc/init.d/systemctl status firewalld启动状态:关闭状态:2:暂时关闭防火墙systemctl stop firewalld3:永…

linux中配置后重启的命令是什么,Linux系统怎么用命令重启防火墙

Linux系统下如果我们关闭了防火墙或者防火墙出现某些故障时候,我们需要重新启动,那么怎么用命令实现呢?下面由学习啦小编为大家整理了Linux系统重启防火墙命令的详细说明,希望对大家有帮助! Linux系统重启防火墙命令的详细说明 一.Linux下开…

使用ResNet18实现CIFAR10数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

resnet18实现cifar10分类

实验步骤 搭建resnet18网络 数据集加载 模型训练和改进 分析评估 Kaggle提交 网络构建 实验初期拟采用torchvision中实现的resnet18作为网络结构,为了方便修改网络结构,于是重新实现了resnet18网络 resnet18由一个7x7的降采样卷积,一个max pooling层,8个basicblock…

resnet18 结构

可以看到 在fc 层之前的一层是avgpool 层 其实就是卷积 只有alenet 才是3个全连接吧

【深度学习】基于PyTorch搭建ResNet18、ResNet34、ResNet50、ResNet101、ResNet152网络

一、使用PyTorch搭建ResNet18网络并使用CIFAR10数据集训练测试 1. ResNet18网络结构 所有不同层数的ResNet: 这里给出了我认为比较详细的ResNet18网络具体参数和执行流程图: 2. 实现代码 这里并未采用BasicBlock和BottleNeck复现ResNet18 具体ResN…

【Pytorch项目实战】之ResNet系列:resnet18、resnet34、resnet50、resnet101、resnet152

文章目录 一、项目思路二、源码下载(1)网络模型:resnet.py(2)附属代码1:_internally_replaced_utils.py(3)附属代码2:utils.py 三、源码详解3.1、导入模块3.2、API接口&a…

Tensorflow2.0使用Resnet18进行数据训练

在今年的3月7号,谷歌在 Tensorflow Developer Summit 2019 大会上发布 TensorFlow 2.0 Alpha 版,随后又发布了Beta版本。 Resnet18结构 Tensorflow搭建Resnet18 导入第三方库 import tensorflow as tf from tensorflow import keras from tensorflow.k…

resnet 18 实现

一、残差块 让我们聚焦于神经网络局部:如图7.6.2所示,假设我们的原始输入为x,而希望学出的理想映射为f(x)(作为 图7.6.2上方激活函数的输入)。 图7.6.2左图虚线框中的部分需要直接拟合出该映射f(x),而右图…

ResNet18复现

ResNet18的网络架构图 首先将网络分为四层(layers),每层有两个模块组成,除了第一层是两个普通的残差块组成,其它三层有一个普通的残差块和下采样的卷积块组成。输入图像为3x224x224格式,经过卷积池化后为64…