Cli*_*ord 11
您似乎对编译的可执行代码有一些基本的误解.以下内容适用于嵌入式和桌面系统.
头文件只不过是其他任何源文件.不同之处在于它们由预处理器插入编译单元而不是直接编译.在大多数情况下,它们仅包含声明性语句,并且通常不会在可执行指令或存储数据的意义上对生成的代码做出贡献.
在运行时没有任何的源代码是需要对目标存在; 编译器的工作是从源生成本机可执行机器代码.正是这个机器代码存储并在目标上运行.
头文件与库不同.它(仅仅)(通常)是库内容的声明(函数原型和其他符号声明,例如常量,数据,宏,枚举).该库采用存储在组合存档中的预编译/汇编目标代码的形式.链接器的工作是将所需的库代码与从您自己的源代码编译生成的目标代码组合在一起.这是在目标上存储和执行的链接可执行文件,而不是原始源代码.
关于包含声明性代码的头文件的例外情况是它们在宏中包含内联代码或可执行代码.但是,如果应用程序明确调用此类代码,则仅占用应用程序中的空间.
链接库代码时,只链接应用程序代码中引用所需的那些库对象代码组件,而不是整个库(除非整个库仅由单个目标文件组成).