C/C++的编译基础知识

目录

一、编译的过程都有哪些

二、程序一定要从main函数开始运行吗? 

三、make与cmake的区别 


一、编译的过程都有哪些

C语言编译过程详解 - CarpenterLee - 博客园

预处理、编译、汇编、链接

预处理:预处理用于将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件;

gcc -E -I./inc test.c -o test.i

编译:将程序编译成汇编

gcc -S -I./inc test.c -o test.s

汇编: 将汇编代码转成机器码

as test.s -o test.o

链接: 将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件

ld -o test.out test.o inc/mymath.o ...libraries...

二、程序一定要从main函数开始运行吗? 

程序一定要从main函数开始运行吗? - 知乎

般程序的入口是__start函数,有两个段:

  • .init段:进程的初始化代码,一个程序开始运行时,在main函数调用之前,会先运行.init段中的代码。
  • .fini段:进程终止代码,当main函数正常退出后,glibc会安排执行该段代码。

使用-e指定入口函数符号:

ld -static -e nomain -o test test.o

三、make与cmake的区别 

CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。

CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))

四、gcc、clang

一个编译器可以按照三段式分为:前段(Fontend)、优化器(Optimizer)、后端(Backend)

CLang是一个由C++编写的编译器前端,能够编译C/C++/Objective等高级语言,属于LLVM的一部分

Clang和GCC的主要区别如下所示。

  • Clang比GCC编译用的时间更短 
  • Clang比GCC的内存占用更小。
  • GCC比Clang支持更多的语言,例如Java。
  • Clang生成的中间产物比GCC更小。
  • Clang的错误提示比GCC更加友好。
  • Clang有静态分析,GCC没有。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值