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

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

背景知识(四个阶段主要操作)

  1. 预处理

    (1)对源代码进行文本级别的处理,预处理后的源码(通常" .i "为扩展名)

    (2)头文件包含处理

    (3)条件编译处理#ifdef、#ifndef、#if、#else、#elif、#endif

    (4)注释删除

    (5)宏替换

  2. 编译

    (1)生成汇编代码," .s"后缀

    (2)语法,语义分析

    (3)过滤空格,换行符等无关字符

  3. 汇编

    (1)生成目标文件(.o或.obj为扩展名)

    (2)生成机器码【二进制】

  4. 连接

    (1)将多个目标文件(.o/.obj)和所需的库文件(静态库.a/.lib或动态库.so/.dll)组合,生 .exe、

    (2)生成可执行文件或库文件

    (3)库文件处理(动静态连接)

    (4)移除未被使用的代码或数据

j

(1).i :预处理后的源代码

(2).s 文件:汇编语言文件

(3).o 文件:(Linux/Unix 系统,Windows 系统对应.obj)

目标文件(Object File)

(4).exe 文件:可执行文件

动静态库

  1. 静态库:指编译链接 时,把库文件的代码全部加入到可执行文件中,
    (1)优缺点:文件比较大 ,但运行时不需要库文件了。静态库后缀名**".a"**
  2. 动态库:在程序执行时 由OS的动态链接器加载所需的动态库到内存
    (1)优缺点:节省系统的开销。动态库后缀**".so"**
  3. gcc 在编译时默认使用动态库。

gcc选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件

-static 此选项对生成的文件采用静态链接
-g 生成调试信息 。

-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-O0

-O1

-O2

-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-w 不生成任何警告信息。

-Wall 生成所有警告信息。

没经过处理的源码:

经过预处理到编译后:g++ -E test.cc -o test.i: 源码 - > 预处理代码
注释删除,宏替换,头文件包含处理

g++ -S test.i -o test.s后:预处理代码 -> 汇编代码

g++ -c test.s -o test.o后:汇编代码 -> 目标文件

g++ -o mytest test.o或则g++ test.o -o mytest.1后: 生成 .exe


相关推荐
Elastic 中国社区官方博客8 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌8 小时前
进程控制管理
linux·运维·服务器
Escalating_xu8 小时前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip
Zucker n9 小时前
英语“论文”语法检查工具
linux·windows
fengkai45459 小时前
3、Kubernetes的Namespace&Contexts&Pod&YAML格式
运维·容器·kubernetes·k8s·namespace·yaml·pod
2401_868534789 小时前
局域网络中信息安全方案设计及攻击防范技术(制造企业园区网)
服务器·网络
戴西软件10 小时前
制造研发中的AI视觉与仿真:戴西工程图纸智能审图智能体、戴西3DViz_CAE AI集成与戴西3DViz_CAD AI集成
大数据·运维·人工智能·3d·自动化·制造·rpa
苏宸啊10 小时前
Reactor反应堆模式
linux
javaDocker10 小时前
1800 亿科技投入砸下去,多数机构平的只是服务器,不是能力
运维·服务器·人工智能·科技·研发效能·金融科技
服务器硬件项目经理10 小时前
超节点修仙录 目 录
服务器·硬件工程·硬件