其他分享
首页 > 其他分享> > 8.21 随笔

8.21 随笔

作者:互联网

 

******************************************************************************************

.c   所写c源文件

进行预处理

.i    c文件替换宏,头文件包含(头文件中内容放在源文件开头)等后的文件

.ii    cpp文件替换宏,头文件包含(头文件中内容放在源文件开头)等后的文件

进行编译

.s   (将 .i 文件编译而生成的)汇编文件(可能有很多个)

进行汇编

.o   .obj 目标文件,为二进制机器代码

进行(多个文件)链接

生成可执行文件,在windows下为.exe,linux下.out

 

******************************************************************************************

所用gcc命令:

gcc -E    hello.c       -o hello.i

gcc -E     -o hello.i      hello.c    

//        效果相同顺序不敏感

//  -E编译选项表示仅进行预处理

//  -o选项表明指定输出文件名,即将hello.c预处理为hello.i

gcc -S      -o hello.s      hello.i

//  -S选项表示只激活预处理和编译,就是指把文件编译成为汇编代码 .s 汇编文件

gcc -c       -o hello.o       hello.s

//  -c选项表示激活预处理编译汇编,不链接,因此生成的是 .o 目标文件

gcc           -o hello            hello.o

//  不加选项,激活所有过程,生成可执行文件,windows下指定为无后缀也会生成 .exe 可执行文件

 

******************************************************************************************

//  其中,被执行命令的文件为何文件不重要,即:

//  gcc  -o hello  hello.xxx

//  其中xxx为o、i、s、c均能执行命令,将直接生成至被激活的最后一个状态,此处因为

//  没有加任何编译选项,生成至可执行文件 . exe

 ******************************************************************************************

 

库文件

静态库的代码在编译的过程中已经载入到可执行文件中,所以最后生成的可执行文件相对较大

动态库的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,所以最后生成的可执行文件相对较小

静态库和动态库的最大区别是,静态库链接的时候把库直接加载到程序中,而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度和降低程序的耦合度。

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。

无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件

 理解不到位,粘贴一份日后看

 

标签:可执行文件,文件,gcc,生成,编译,8.21,随笔,hello
来源: https://www.cnblogs.com/Willard-Wong/p/16610447.html