当前位置: 首页 > article >正文

Linux编译器-gcc/g++使用

1. 背景知识

1. 预处理(进行宏替换)

2. 编译(生成汇编)

3. 汇编(生成机器可识别代码)

4. 连接(生成可执行文件或库文件)

2. gcc如何完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

编译(生成汇编)

汇编(生成机器可识别代码)

连接(生成可执行文件或库文件)

在这里涉及到一个重要的概念:函数库

函数库一般分为静态库和动态库两种。

自己总结

gcc mycode.c -0 mytest,后,./mytest就可以编译了,相当于把a.out重命名了

1、只进行预处理:gcc -E mycode.c -0 mycode.i,(预处理后干净的C语言)

2、变成汇编语言(编译)gcc -S mycode.i -o mycode.s(将汇编工作做完,就停下来)

3、汇编(生成机器可以识别代码)gcc -c mycode.s -o mycode.o,(mycode.o是目标文件,将会边工作做完,就停下来了),.obj文件,虽是二进制了,但不可以单独执行,需要经过连接才行。

4、连接,gcc mycode.o -o mytest后,再./mytest可以编译成功,连接过程将可重定位目标二进制和库进行连接形成可执行程序。键盘上的Esc方便记忆

.o和库是如何连接的?1、动静态连接

C语言静态库安装,sudo yum install -y glic-static livsbtdc++-static

gcc mycode.c -o mycode -static,静态连接,gcc默认用动态库,没有静态库,用不了static,-static本质:所以的连接都需要要求全部变为静态连接

动静态的优缺点:

动态库是因为共享库,可以有效节省资源(磁盘,内存,网络完全)等,一旦缺失,各个程序无法运行,静态库:不依赖库,程序可以独立运行,消耗资源,体积大

g++ mycode.cpp -o mycode -static -g(-g是用debug的意思,因为默认是release版本)


http://www.kler.cn/a/299870.html

相关文章:

  • 壁纸设计过程中如何增加氛围感
  • 写一个存储“网站”的网站前的分析
  • flutter_学习记录_00_环境搭建
  • HTB:Support[WriteUP]
  • WinRAR.exe命令行的使用
  • 进行提问用什么助动词?E
  • java后端如何发送httpGET和POST请求
  • .NET 一款用于解密web.config配置的工具
  • 11.5.软件系统分析与设计-面向对象的程序设计与实现
  • 【贪心算法】(一)贪心算法理论及基础习题
  • Redis:发布(pub)与订阅(sub)实战
  • HBase 源码阅读(四)HBase 关于LSM Tree的实现- MemStore
  • 视频怎么转换成mp3格式?分享5种便捷的转换方法
  • Ef 在迁移过程中 遇到 The migration ‘xxxx‘ was not found. 的问题(未解决)
  • JAVAEE初阶第七节(下)——物理原理与TCP_IP
  • 代码随想录训练营day44|1143.最长公共子序列,1035.不相交的线, 53. 最大子序和,392.判断子序列
  • TinyWebserver的复现与改进(7):日志系统
  • 25 考研数学大纲有什么变化?
  • 果蔬识别系统性能优化之路(一)
  • 【LeetCode:3174】清除数字(Java)
  • 《JavaEE进阶》----15.<Spring Boot 日志>
  • Day 31: 贪心算法基础 V
  • 【linux-Day2】linux下的基本指令
  • Ubuntu基本命令的熟悉和使用
  • 插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV
  • Rickdiculously Easy靶场渗透测试