美文网首页
C编译细节

C编译细节

作者: 小乙的乙 | 来源:发表于2019-10-24 17:57 被阅读0次

Linux C编译细节

编译工具一般隐藏了编译的细节,c源文件到可执行文件,一般经过4个过程

  1. 预编译
  • 翻译 #define #if 等预编译指令 展开宏
  • 删除注释
  • 添加行好和文件标识 便于报错标识
  • 保留 #pragma编译指令
  • 生成.i 文件
gcc -E hello.c -o hello.i
  1. 编译 预编译文件生成汇编代码 生成.s 文件
gcc -S hello.i -o hello.s
  1. 汇编 汇编文件转化为机器可执行的指令(目标文件.o)
as hello.s -o hello.o
#或者
gcc -c hello.c -o hello.o 
# 从c代码一步到 可执行指令
  1. 连接 可执行的指令连接成可执行文件 .a 文件
ld -demangle -lto_library libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.13.0 -o a.out hello.o -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a

# 大致分析
ld -demangle -lto_library libLTO.dylib #动态库
-no_deduplicate -dynamic -arch x86_64 #架构
-macosx_version_min 10.13.0 #最低系统版本
-o a.out hello.o #输入输出文件
-lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a #系统 版本可能不一样

写个Makefile玩一下

.PHONY:clean

# 链接 机器链接成可执行文件
main: hello.o hello.s hello.i
    gcc hello.o -o a.out

# 预编译 生成预编译文件
pre:
    gcc -E hello.c -o hello.i

#汇编 汇编代码生成机器指令(二进制)

asem:
    gcc -c hello.s -o hello.o

# 编译 生成汇编文件
comp:
    gcc -S hello.i -o hello.s


# clean 文件
clean:
    rm -rf *.o a.out *.s *.I

运行效果

效果

相关文章

  • C编译细节

    Linux C编译细节 编译工具一般隐藏了编译的细节,c源文件到可执行文件,一般经过4个过程 预编译 翻译 #de...

  • AOSP-编译C/C++可执行程序/库

    编译C/C++ 前面我们完成了java的编译,编译成jar包,编译成apk。 接下来我们看看C/C++的编译,编译...

  • 命令行编译C++/C文件

    编译C文件用GCC 编译C++文件(包括.C/C++文件)用G++ 编译C++文件常用方法: 单个文件: g++ ...

  • C语言跨平台移植

    C语言编译流程: C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、...

  • [C++之旅] 0 Mac下编译运行C/C++

    [C++之旅] 0 Mac下编译运行C/C++ 编译c语言时采用gcc指令 编译c++语言时采用g++指令 以下以...

  • 如何识别C++编译以后的函数名

    如何识别C++编译以后的函数名(demangle) C/C++语言在编译以后,函数的名字会被编译器修改,改成编译器...

  • gcc_clang的使用_day93

    编译命令 编译流程 预编译 编译 链接, 动态链接/静态链接 编写文件 add.c clang -g -c ad...

  • iOS Runtime实用详解(一)

    基本概念 了解 C/C++编译C/C++编译就是将C/C++的代码映射到相应的机器码,编译过程包括几个部分分别是编...

  • 2019-04-13

    编译 编译运行:nim c -r greetings.nim编译正式版:nim c -d:release gree...

  • C++复习之知识点

    1.编译 编译C++程序时,编译器自动定义一个__cplusplus。 编译标准C时,编译器自动定义__STDC_...

网友评论

      本文标题:C编译细节

      本文链接:https://www.haomeiwen.com/subject/tipdvctx.html