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

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.mrgr.cn/news/24628.html

相关文章:

  • 分享面试题- DDD中事务处理放在哪一层?
  • 反馈的图形化-尝试建立图形化
  • 象过河仓库管理软件,轻松实现无纸化录入,自动化记账
  • 算法设计与分析(二分查找算法
  • 【研赛论文】数学建模2024华为杯论文word/latex模板
  • UniApp低代码-颜色选择器diy-color-picker-代码生成器
  • 完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (四) 运行、调试、各种问题解决
  • 起底“进制基数”:从“十根指数”到“无限可能”
  • 使用人力劳务灵工安全高效的发薪工具
  • Web server failed to start. Port XXX was already in use.
  • 蓝桥杯18小白第5题
  • MySQL 8.0授权语法变更及解决方案‌
  • 安全API
  • C++常用设计模式
  • 【鸿蒙应用】Grid和GridItem组件
  • [数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别
  • 基于java+springboot+vue实现的林业产品推荐系统(文末源码+Lw)135
  • Python3网络爬虫开发实战(14)资讯类页面智能解析
  • 【一文看懂】Fanbox国内怎么支付?Fanbox PayPal付款失败?用下面的虚拟卡支付就可以了
  • 为AppInventor2开发自己的拓展(Extension) - 拓展开发入门篇