首页 > 系统相关 >Linux——编译链接和gcc

Linux——编译链接和gcc

时间:2024-04-04 21:59:20浏览次数:19  
标签:文件 gcc 生成 编译 Linux main 链接

1.gcc,g++,gdb安装


命令行写gcc,g++,gdb根据提示安装:sudo apt install gcc/g++/gdb


2.gcc分布编译链接


(1)预编译: gcc -E main.c -o main.i (2)编译: gcc -S main.i -o main.s (3)汇编: gcc -c main.s -o main.o (4)链接 gcc main.o -o main 执行: ./main 或者:全路径/main


3.编译链接过程

image-20230710205523939.png


编译链接原理:

main.c通过预编译生成main.i文件

main.i通过编译生成main.s文件

main.s通过汇编生成main.o文件(可重定位的二进制目标文件)

链接阶段就是将所有的.o文件, .a文件(静态库文件), .lib文件, .obj文件链接起来,生成.out文件(ELF格式的可执行文件) (Windows是生成.exe文件)

预编译生成.i文件(第一步),编译生成.s文件(第二步),即编译生成汇编指令,然后接下来

**当然就是汇编了,对汇编指令进行汇编,生成.o文件(第(3)步),即变成二进制指令(第(3) 步),最后就是链接了(第四步)**

参考书目及拓展:程序员的自我修养     2.1章  37页
(1)预编译阶段

a)删除所有的"#define",并且展开所有的宏定义;

b)处理所有的条件预编译指令,"#if","#ifdef","#endif"等;

c)处理"#include"预编译指令,将被包含的文件插入到该预编译指令的位置;

d)删除所有的注释;
e)添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错 误和警告时显示行号;

f)保留所有的#pragma编译器指令,因为编译器需要使用它们;


(2)编译阶段 词法分析,语法分析,语义分析,代码优化,汇总符号


(3)汇编阶段: 将汇编指令翻译成二进制格式,生成各个section,生成符号表.

(4)链接阶段

1)合并各个section,调整section的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址;

2)符号重定位,即在使用符号的地方全部替换成符号的虚拟地址;


4.执行


路径+可执行文件名

两步:gcc -c main.c -o main.o 或者 gcc -c main.c
gcc -o main main.o gcc -o main main.c/main.o
一步:gcc -o main main.c


./main

标签:文件,gcc,生成,编译,Linux,main,链接
From: https://blog.csdn.net/weixin_74017264/article/details/137383726

相关文章

  • Linux——文件查看命令 文件编辑命令
    文件查看命令(1)cat1)查看文件内容(内容较少时使用):cat文件名2)合并文件:cat文件名1文件名2>文件名33)往文件中写入数据,(Ctrl+d结束输入);(2)moremore文件名文件内容较多时用more(空格,回车往下翻,b回滚)(3)lessless文件名看完内容之后不会显示到屏幕上;(......
  • Linux华为云Hadoop配置环境
    手工搭建Hadoop环境(Linux)_弹性云服务器ECS_最佳实践(huaweicloud.com)https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0000001698668477.html?locale=zh-cn#ZH-CN_TOPIC_0000001698668477__li49001945163110跟着傻瓜式CV即可。气死我了!找了半天,最后在官网......
  • Linux常用命令
    Linux常用命令本文记录了常用命令的详细解读。列出当前目录ls列出详细信息,可以查看文件和文件夹到权限ls-al给文件和文件夹授权sudochmod-R777dataset创建文件夹mkdir复制文件夹(递归)cp-r通过SSH复制到远程服务器scp-r在linux下一般用scp这个命令来......
  • Linux项目自动化构建工具 --- make/Makefile
    文章目录make/Makefile文件1背景2理解2.1创建执行代码2.2创建makefile文件2.3运行make指令2.3.1依赖关系2.3.2依赖方法2.3.3原理2.4项目清理make/Makefile文件1背景会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文......
  • centos7 编译安装imagemagick7.1
    参考https://blog.csdn.net/chen_cong_520/article/details/134638717#cd/usr/local#wgethttps://www.nasm.us/pub/nasm/releasebuilds/2.16/nasm-2.16.tar.gz#tar-zxvfnasm-2.16.tar.gz#cdnasm-2.16#./autogen.sh&&./configure&&make&&a......
  • 【Linux】网络基础常识
    文章目录1.网络常识1.0dhcp协议1.1ip地址,mac地址是什么?1.2你拿着手机是如何连接上wifi的?1.3数据,流量是什么?手机如何通过“数据/流量”上网?1.4电脑连接wifi的原理?电脑通过热点上网的原理?1.5固定电话打电话的原理?智能手机打手机电话/语音电话/视频电话的原理?1.62g,5g有什......
  • linux驱动-17-input子系统
    1input子系统介绍按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux内核为此专门做了一个叫做input子系统的框架来处理输入事件。input子系统分为input驱动层、input核心层、input事件处理层,最终给用户空间提供可访问的设备节点。驱动层:输入设备的具体驱动程序,......
  • Kali Linux介绍
    KaliLinux是一个基于Debian的Linux发行版,主要用于数字取证和渗透测试。它是由OffensiveSecurity维护和资助的,每季度更新一次。KaliLinux最初是由OffensiveSecurity的MatiAharoni和DevonKearns通过重写BackTrack来完成的,而BackTrack也是他们之前编写的用于取证的Linux发行......
  • Make编译之编译32bit ffmpeg
    跨平台编译ffmpeg简述下载ffmpeg源码官网或者github下载使用脚本配置configurehi3798板子厂家提供的编译器,在编译ffmpeg时,必须禁用汇编才能通过使用脚本配置项如下:重要配置项--cross-prefix:使用跨平台工具链的前缀,就是去掉后面如gcc、g++的部分--enable-cross-com......
  • 利用AI结合无极低码(免费版)快速实现接口开发教程,会sql即可,不需要编写编译代码
    无极低码无代码写服务+AI实践本次演示最简单的单表无代码增删改查发布服务功能,更复杂的多表操作,安全验证,多接口调用,自自动生成接口服务,生成二开代码,生成调用接口测试,一键生成管理界面多条件检索、修改、删除、查看、通用公共接口调用、通用无限级字典调用等后续逐步更新,请......