程序生成
文章平均质量分 86
娱乐界祖师爷
这个作者很懒,什么都没留下…
展开
-
编译器链接过程中的强符号和弱符号
属性声明GNU C通过__attribute__声明weak属性,可以将一个强符号转换为弱符号。使用方法如下:__attribute__((weak)) void func(void);__attribute__((weak)) int num;编译器在编译源程序时,无论你是变量名,函数名,在它眼里,都是一个符号而已,用来表征一个地址。编译器会将这些符号集中,存放到一个叫符号表的section中。一个软件工程项目中,可能有多个源文件。如果A.c源文件中定义了一个全局变量num,而B.原创 2022-04-17 20:30:42 · 2219 阅读 · 0 评论 -
程序目标文件探究
目标文件的格式 编译器编译源代码后生成的文件叫做目标文件。目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。 现在PC平台流行的可执行文件格式主要是windows下的PE(portable executable)和 Linux的ELF(Executable linkable format),它们都是COFF(Common file format)格式的变种。目标文件就是源代码编译后但未进行链接的那些中间文件(...原创 2022-03-28 23:24:51 · 662 阅读 · 0 评论 -
编译和链接
1.编译和链接合并到一起的过程称为构建。例如“gcc hello.c”命令就包含了非常复杂的过程。2.生成程序被隐藏了的过程——预处理、编译、汇编、链接。预处理(预编译):首先将源代码文件(.c)和相关的头文件(.h)等被预编译期cpp编译成一个.i文件。对于C++程序来说,它的源代码文件的扩展名可能是.cpp,头文件是.hpp,而预编译后的文件扩展名是.ii。第一步预编译的过程相当于如下命令:gcc -E hello.c -o hello.i预编译过程主要处理那些源代码文件中的"#原创 2022-03-27 20:58:59 · 1586 阅读 · 0 评论