编译链接

参考网址
预处理,编译,汇编,链接

预处理 处理#指令

预处理主要是处理源代码中以#开头的指令(#pragma 除外),例如#include,预处理之后会将stdio.h的内容插入到预处理指令的位置。
想要只生成预处理之后的内容,可以使用下面的方式:
gcc -E -o helloWorld.i helloWorld.c #-E参数表示只进行预处理
生成的helloWorld.i即为预处理之后的内容

编译 C语言->汇编语言

预处理之后就需要对生成的预处理文件进行词法分析,语法分析,语义分析,最终产生汇编代码文件,说白点可以简单理解为将C代码“翻译”成汇编代码。该过程是核心同时也是较复杂的一个过程。
gcc -S -o helloWorld.s helloWorld.c #-S参数表示只到生成汇编为止

汇编 汇编语言->机器码

汇编是将汇编代码翻译成机器可执行的指令,生成目标文件。整个过程较为简单,几乎只是按照汇编指令和机器指令进行一一翻译。

链接

链接是以某种方式将各个目标文件整个在一起,生成最后的可执行文件。我们的hello程序中调用了printf函数,但是并不存在于helloWorld.o中,而是存在于libc.so或libc.a中。
通过ldd命令看到helloWorld程序链接了系统的库

linux下制作静态库

动态库的制作与两种使用方式

在执行 make 命令编译程序时,常见的输出信息包括 CCLDAR,它们分别表示以下含义:

  1. CC (Compiler):表示编译器,在编译源代码文件时使用。通常情况下,CC 是指 C 语言的编译器,如 GCC (GNU Compiler Collection)。对于 C++ 程序,可能会显示 CXX 来表示 C++ 编译器。

  2. LD (Linker):表示链接器,在编译和链接阶段将编译后的目标文件连接成可执行文件或库文件时使用。链接器会将多个目标文件合并成一个可执行文件或库文件,并解决函数调用和符号引用等问题。

  3. AR (Archiver):表示静态库生成器,用于创建静态库文件。静态库是一组预编译的目标文件的集合,通过 ar 命令创建并管理静态库文件。通常在编译过程中会使用 AR 来创建和管理静态库文件。

这些信息在 make 过程中显示出来,有助于了解编译、链接和库生成等阶段所使用的工具和操作。正常情况下,这些输出信息表示编译过程正常进行,并且显示了使用的工具和阶段的进度。

• CC when compiling a core part of the kernel
• CC [M] when compiling a module
• LD when linking
posted @ 2025-05-15 15:44  西西弗斯身强体健  阅读(27)  评论(0)    收藏  举报