gcc编译
gcc的下载(下载mingw,里面包含gcc)
下载安装MinGW-w64详细步骤(c/c++的编译器gcc的windows版,win10真实可用)
gcc编译可执行文件
由源码转换为可执行文件要顺序经过四个步骤
1、预处理(pre processing)
2、编译(compiling)
3、汇编(assembling)
4、链接(linking)
预处理gcc命令:
预处理
gcc -E main.c -o main.i
其中 -E -o 是编译选项,-E 指预处理,-o 指生成的目标文件。生成的为 .i 文件(扩展文件)。
编译gcc命令:
编译
gcc -S main.i -o main.s
其中 -S 指编译。生成的为 .s 文件。
汇编gcc命令:
汇编
gcc -c main.s -o main.o
其中 -c 指汇编。生成的为 .o 文件(目标文件)。
链接gcc命令:
链接
gcc main.o -o main
生成的为可执行文件(windows下为.exe)。
gcc main.c -o main
上述命令由源文件生成可执行文件,过程中依然是先构建目标文件,只不过目标文件在编译可执行文件后删除。
gcc的编译过程中,不同阶段执行的动作不同。
预处理阶段:
这个步骤的动作会把源文件中引入的头文件展开和一些宏定义的替换。
编译阶段:
这个步骤的动作会先检查源码中是否有语法错误等,然后将高级语言转换为汇编语言。
汇编阶段:
这个步骤的动作会根据编译生成的汇编语言文件,生成二进制代码的目标文件。
链接阶段:
这个步骤是对目标文件中只有声明但没有实现的方法做一个链接库的动作。库包含静态库和动态库,库里包含了方法的实现。
静态库和动态库
其中,当一个项目需要引用到别的项目的方法或内容,项目很难将对方的源码引入,这时可以将对方的源码编译成一个库,在编译己方项目时,通过链接库的方法来获取其他项目函数的实现。静态库和动态库的区别为,静态库会编译进可执行文件中。而动态库不随可执行文件,由可执行文件执行到需要动态库的时候才去动态库里找实现。在linux系统中,静态库为.a文件,动态库为.so文件;在windows系统中,静态库为.lib文件,动态库为.dll文件。
gcc编译静态库的方法
ar -rc libtest.a .\test.o
首先由test.c编译出目标文件test.o,根据目标文件生成静态库libtest.a。
gcc编译链接静态库的方法
gcc -o main.exe main.o -L .\test1\ -l tes