首页 > 其他分享 >gcc编译器

gcc编译器

时间:2023-08-19 16:55:07浏览次数:28  
标签:文件 gcc 编译 编译器 hello out

gcc编译器

hello.c - 给谁看
计算机 - 只能看懂二进制内容 - 010010101010110101
人 - 看明白
结果 -
人可以看明白
计算机 - 蒙圈

将当前缩写的代码经过翻译得到计算机可以看懂的代码, 翻译的过程 - 编译
编译中需要用到的工具, 编译器
gcc就是编译器
注意 :
编译器不唯一
vc
terbo c
keil5
...

过程 :
gcc hello.c
得到a.out
a - application - 应用
out - output - 输出
a.out - 编译程序所得到的输出的应用程序 - 可执行程序 - 二进制程序 - 计算机可以看明白
hello.c -> gcc -> a.out

弊端 :
a.out - 用来干嘛的

gcc xx.c -> a.out
默认得到a.out - 目的性及其不明确

gcc hello.c -> a.out  
gcc world.c -> a.out  

​ 后面的a.out将前面的a.out覆盖

程序编译的过程 :
gcc编译程序的步骤 : 四步骤 / 三步骤

  1. 预处理
    将源文件中包含的头文件拷贝到当前的.c文件中

    #include <stdio.h>  gcc编译器第一步就会将stdio.h头文件内容拷贝过来 
    

gcc -E hello.c -o hello.i
```

​    只进行预处理的步骤, 得到.i文件, 打开看看 

​    只进行预处理的步骤, 得到.i文件, 打开看看 
  1. 编译
    将预处理得到的.i文件进行编译得到汇编文件
    汇编文件 : .s / .S - 汇编代码

gcc -S hello.i -o hello.s
```

    .s - 计算机 - 不明白 

​    .s - 计算机 - 不明白 
  1. 汇编
    将编译后得到的.s文件经过汇编得到计算机可以识别的机器文件 - 二进制
    该文件叫做目标文件
    目标文件 : .o - object

gcc -c hello.s -o hello.o
```

​    .o - 二进制内容 - 计算机 - 明白 

​    .o - 二进制内容 - 计算机 - 明白 

.o文件无法运行 

4.链接
就是将大神的各种代码, 例如: printf函数的实现代码 和 字节的代码整合起来 - 形成了二进制可执行程序
该过程称为链接
|xxxxxxxxxxxxxxxxx|.o + |yyyyyyyyyyyyyyyy|.o = 二进制可执行程序
字节写的代码 各种大神代码
gcc hello.o -o hello
此时可执行程序名字为hello

gcc选项:
-E : 预处理, 只会预处理
-o : 指定输出的文件名
-S : 只进行编译步骤
-c : 只进行汇编步骤

运行程序 :
./hello

gcc xx.c -o xx 
gcc hello.c -o hello - 一步到位 - 标准 

编译 - 语法错误
1.遇到很多问题
先解决第一个问题 再次编译

2.百度翻译
input
outout
command
previous
...
先翻译 - 看看是哪里出的问题

printf函数
将程序中的数据显示到终端窗口中 - 包含stdio.h

可以在双引号里使用占位符, 将数据转移到双引号后面
%d - 整数类型占位符
可以在一条语句中使用多个占位符, 需要在双引号后面使用多个数字.
数字个数和占位符个数, 保持一致

占位符表示的数据可以是未知的 - 变量

输出两台手机的差价

标签:文件,gcc,编译,编译器,hello,out
From: https://www.cnblogs.com/xingge7/p/17642675.html

相关文章

  • gcc make cmake ninja的区别
    理清C++编译过程用到的工具概念ref:GCC、CMake、CMakelist、Make、Makefile、Ninja啥关系?一图讲透!-知乎(zhihu.com)早先学C++的时候,因为只需要点击IDE的运行按钮,程序就可以跑起来,写过最复杂的只不过是几个文件的学生管理系统。现在要重新拾起C++,看的项目和之前的不可同日而......
  • linux下gcc/g++创建一个共享库项目以及创建一个可执行项目动态链接该共享库
    1.先确保有g++命令2.创建一个c++项目目录,并cd到该目录3.创建共享库头文件:dynamic_so.h#ifndef__TEST__#define__TEST__inttestFun(inta,intb);#endif4.创建对应共享库的实现文件:dynamic_so.cpp#include"dynamic_so.h"inttestFun(inta,intb){returna......
  • 【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
    问题描述在AppServiceforlinux上创建一个PHP应用,通过phpinfo()查看PHP的扩展设置,发现JIT没有被开启, jit_buffer_size大小为0.那么,在AppService的环境中,如何开启JIT呢? 问题解答PHP8在PHP的内核中添加了JIT编译器,可以极大地提高性能。首先,仅在启用opcache的情况下,JI......
  • 【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
    问题描述在AppServiceforlinux上创建一个PHP应用,通过phpinfo()查看PHP的扩展设置,发现JIT没有被开启, jit_buffer_size大小为0.那么,在AppService的环境中,如何开启JIT呢? 问题解答PHP8在PHP的内核中添加了JIT编译器,可以极大地提高性能。首先,仅在启用opcache的情况下,JIT才有效......
  • ubuntu 下 GCC/G++ 的 include 搜索路径查看与设置
    https://blog.csdn.net/quicmous/article/details/106790319 一、如何查看include搜索路径输入如下命令:>echo'main(){}'|gcc-E-v-1显示结果如下:Usingbuilt-inspecs.COLLECT_GCC=gccOFFLOAD_TARGET_NAMES=nvptx-noneOFFLOAD_TARGET_DEFAULT=1Target:x86_64-linux-gn......
  • Wiindows下更改CMake编译器为MinGW
    个人环境MinGW:使用QT6install的mingw1120_64.CMake:使用QT6install的CMake3.24.2.第一次编译时,默认生成VS的工程文件,为了修改编译器为MinGW,在编译时,键入:cmake-G"MinGWMakefiles"-DCMAKE_CXX_FLAGES=-std=c++11同时也指定了编译器支持的编译标准为c++11注......
  • Qt编译器——MinGW和MSVC的区别
    #1、MSVC:即MicrosoftVisualC++Compiler,即微软自己的编译器#2、MinGW:我们都知道GNU在Linux下面鼎鼎大名的gcc/g++,MinGW则是指MinimalistGNUforWindows的缩写Qt用MSVC和MinGW哪个编译器编译程序比较好?我的建议是使用MSVC。理由一:qtcreator的debuger有功能缺陷,经......
  • 形象谈JVM-第三章-即时编译器优化技术
    即时编译器优化技术一览:相信许多同学看完这个表格,脑子里面嗡嗡的,这些名字也是晦涩难懂,要实现这些优化的技术确实有比较大的难度,但是咱们只是学习,去理解这些技术,其实并不难,下面咱们直接开讲。首先需要明确一点的,作者是为了讲解方便,使用java的语法来表示优化技术所发挥出来的作......
  • GCC options: compare -nostartfiles, -nodefaultlibs, -nolibc
    GNU不同编译选项的区别nostartfiles不使用启动文件,默认使用库nodefaultlibs不使用默认库,默认使用启动文件nostdlib不使用启动文件,不使用默认库nolibc不使用启动文件,不使用与系统库紧耦合的库-nostartfiles-nodefaultlibs-nolibc-nostdlib/usr/lib/Scrt1.o......
  • 形象谈JVM-第二章-认识编译器
    我在上一章《形象谈JVM-第一章-认识JVM》提到的“翻译”,其实就是我们今天所说的“编译”的概念。上一章原文链接:https://www.cnblogs.com/xingxiangtan/p/17617654.html原文:【虚拟机的职责是将字节码翻译成对应系统能够识别并执行的机器码,比如在linux系统,java文件被javac编译......