Linux:gcc的基本知识

gcc 是一个将C语言文件变成可执行文件的工具。 

在Linux中,如果需要将一个C语言文件变得可以执行,那么除了这个文件本身的内容是C语言编写的内容外,还需要gcc这个编译工具进行编译才行。

gcc 使用的格式方法:gcc  要编译的文件 //在该代码下,gcc默认会将编译后的可执行文件改名为 a.out //但是这种编译方式是最新版本的,老版本可能不支持,所以在编译的过程中需要一点改变gcc  需要编译的文件 -std=c99//而若想要换一个名字,使得编译出的文件不在是a.out 则需要使用以下代码gcc 需要编译的文件 -o 新名字 -std=c99 //或是gcc -o 新名字 需要编译的文件 -std=c99

另外,用于编译c++的g++命令也可以编译C语言,且g++编译c++的方法和gcc编译C语言的方法大致相同,但不同的是gcc并不能编译c++


gcc的翻译(编译)过程: 

预处理(Pre-Processing):这个阶段主要处理源文件中的#indef、#include和#define预处理命令;这里主要是把一些include的头文件和一些宏定义,放到源文件中。

  • 输入的是C语言的源文件
  • 输出 :生成一个中间/预加载文件 *.i(以 .i 结尾的文件)
  • 这个阶段对应的gcc命令如下:#gcc –E(预处理) test.c(源文件) -o test.i(将结果生成的文件)
  • 说明:它通过对源文件test.c使用E选项来生成中间文件test.i

汇编(Assembling)

  • 输入:中间文件*.i

  • 输出:编译后生成汇编编语言文件*.s

  • 这个阶段对应的gcc命令如下:
    #gcc -S(汇编) test.i -o test.s(汇编编语言文件)

  • 说明:它通过对源文件test.c使用S选项来生成汇编文件test.s

编译(Compiling)

  • 输入文件:汇编文件*.s
  • 输出文件:二进制机器代码*.o
  • 这个阶段对应的gcc命令如下:#gcc -c(编译) test.s -o test.o

* gcc -c

在功能上,预处理、编译、汇编是3个不同的阶段
但gcc在实际操作时可以把这3个步骤合并为一个步骤来执行,即使用 -c选项:

  • 输入文件:源码*.c文件
  • 输出文件:二进制机器代码*.o
  • 这个阶段对应的gcc命令如下:
    # gcc –c test.c -o test.o
    // -o指定了output_filename

链接(Linking)

  • 输入文件:二进制机器码*.o文件
  • 输出文件:与其它的机器代码和库文件汇集成一个可执行的二进制代码文件(无后缀)
  • 这个阶段对应的gcc命令如下:
    #gcc (没有选项符号) test.o example.o -o test

 

什么是链接?

链接是库和程序的结合,当一个语言被发明的时候是有一套标准的,而这个库也就表示着语言的标准库。

当然,库也分类,在Linux中分为两种,第一种是动态库,通常以.so为后缀,且链接一般默认使用的库就是动态库,而另一种是静态库,是以.a为后缀的,并且在Linux中默认是没有静态库的存在,所以需要自己安装。

安装静态库:
sudo yum install -y glibc-static libstdc++-static
静态库的使用:
gcc -o  指定名字  链接的文件  -static
优缺对比:
  • C动态库,默认提供的
  • gcc默认形成的可执行程序,默认采用动态链接

动态库&&动态链接的优缺点:

  1. 不能丢失
  2. 节省资源

静态库&&静态链接的优缺点:

  1. 一旦形成,和库无关
  2. 浪费资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/267176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云天励飞战略投资神州云海,布局机器人市场

日前,AI上市企业云天励飞(688343.SH)完成了对深圳市神州云海智能科技有限公司(以下简称“神州云海”)的B轮战略投资。 公开资料显示,自2015年于深圳创立以来,神州云海始终聚焦人工智能与服务机器人广阔的应用市场,依托自主的核心算法能力,深耕机器人硬件本体研发,整合上下游产…

Linux系统——LAMP架构

目录 一、LAMP架构组成 1.LAMP定义 2.各组件的主要作用 3.CGI和FastCGI 3.1CGI 3.3CGI和FastCGI比较 4.PHP 4.1PHP简介 4.2PHP的Opcode语言 4.3PHP设置 二、LAMP架构实现 1.编译安装Apache httpd服务 2.编译安装Mysql 3.编译安装PHP 4.安装论坛 5.搭建博客 W…

C++基于多设计模式下的同步异步日志系统day2

📟作者主页:慢热的陕西人 🌴专栏链接:C基于多设计模式下的同步&异步日志系统 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容实现了日志代码设计的实…

前端学习第三天-css基础

1. CSS简介 从HTML被发明开始,样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。 随着HTML的成长,为了满足页面设计者的要求,HTML添加了很多显示功能。但是随着这些功能…

nginx出现 “414 request-uri too large”

nginx出现 “414 request-uri too large” 1.修改传参方式 POST 2.字段能变成后端获取就自己获取,不用前端传 3.修改nginx配置,添加client_header_buffer_size 512k;large_client_header_buffers 4 512k;配置

机器学习 -- 梯度下降算法加深

梯度下降算法 在机器学习中,梯度下降算法常用于最小化代价函数(或损失函数),以此来优化模型的参数。代价函数衡量的是模型预测值与实际值之间的差异。通过最小化这个函数,我们可以找到模型预测最准确的参数。 代价函…

qt 基于百度API的人脸识别

百度云官网:点击跳转 一、创建应用 跳转进去,可以看到以下界面: 点击红色圈内的“去创建”,创建自己的项目。可以看到以下界面: 输入“应用名称”,并勾选“人脸对比”,还要到页面的最后输入“应…

WPF 滑动条样式

效果图&#xff1a; 浅色&#xff1a; 深色&#xff1a; 滑动条部分代码&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…

MariaDB MaxScale实现mysql8读写分离

目录 1.MaxScale 是干什么的&#xff1f; 2.MaxScale 实验环境 3.实现数据库主从复制 4.创建用户 1) 创建监控用户 2) 创建路由用户 5.docker 安装MaxScale 6.配置maxscale 使用 maxctrl list servers 命令查看运行状态 查看注册服务 使用 maxctrl list listeners Read-…

k8s单机部署zookeeper

&#xff08;作者&#xff1a;陈玓玏&#xff09; 拉取镜像&#xff1a;docker pull zookeeper&#xff1b;编辑yaml&#xff1a; apiVersion: v1 kind: Service metadata:name: zookeeperlabels:app: zookeeper spec:ports:- name: clientport: 2181protocol: TCPtargetP…

H.266参考软件VTM各版本的性能差异

VTM&#xff08;VVC Test Model&#xff09;&#xff0c;是H.266视频编码标准的参考软件&#xff0c;即是VVC spec.的一种参考实现&#xff0c;代码里包括了H.266的软件编码器和软件解码器实现&#xff0c;代码地址如下&#xff1a; https://vcgit.hhi.fraunhofer.de/jvet/VVCS…

S1---FPGA硬件板级原理图实战导学

视频链接 FPGA板级实战导学01_哔哩哔哩_bilibili FPGA硬件板级原理图实战导学 【硬件电路设计的方法和技巧-哔哩哔哩】硬件电路设计的方法和技巧01_哔哩哔哩_bilibili&#xff08;40min&#xff09; 【高速板级硬件电路设计-哔哩哔哩】 高速板级硬件电路设计1_哔哩哔哩_bil…

外包干了3个月,技术倒退明显...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点&#xff0c;然后把连接这些对象的链表示为图的弧&#xff0c;最后用对象发送和接收的消…

【C++ map和set】

文章目录 map和set序列式容器和关联式容器键值对setset的主要操作 mapmap主要操作 multiset和multimap map和set 序列式容器和关联式容器 之前我们接触的vector,list,deque等&#xff0c;这些容器统称为序列式容器&#xff0c;其底层为线性序列的的数据结构&#xff0c;里面存…

ChatGPT学习第四周

&#x1f4d6; 学习目标 ChatGPT实践操作 通过实际操作和练习&#xff0c;加深对ChatGPT功能的理解。 项目&#xff1a;创建一个ChatGPT应用案例 设计一个基于ChatGPT的小项目&#xff0c;将理论应用于实践。 ✍️ 学习活动 学习资料 《万字干货&#xff01;ChatGPT 从零完…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:位置设置)

设置组件的对齐方式、布局方向和显示位置。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 align align(value: Alignment) 设置容器元素绘制区域内的子元素的对齐方式。 卡片能力&#xff1a; 从API…

nvm安装及使用

后面补充安装&#xff0c;因为我自己几年前就装好了。。。 看是否正确安装nvm 查看是否在nvm正确安装多个node版本 切换版本 管理员权限运行cmd 指定安装版本 npm i node-sass^4.14.1查看npm数据源 npm config get registry鸿蒙的华为源。。。 https://repo.huaweiclo…

报错问题解决django.db.utils.OperationalError: (1049, “Unknown database ‘ mxshop‘“)

开发环境&#xff1a;ubuntu22.04 pycharm 功能&#xff1a;django连接使用mysql数据库&#xff0c;各项配置看似正常 报错&#xff1a; django.db.utils.OperationalError: (1049, "Unknown database mxshop") 分析检查原因&#xff1a; Setting的配置文件内&…

oracle11安装及使用

安装oracle11 官网下载地址 Oracle Database 11g Release 2 for Microsoft Windows (x64) 官网下载慢可访问我的资源 也可以网盘获取 链接&#xff1a;https://pan.baidu.com/s/1RDrGkqDA7tfKRnpJXUBMDw 提取码&#xff1a;z3na 上传安装包到服务器 在指定目录下创建文件…