Linux编译器GCC的使用
- 编译流程的四个步骤
预处理
编译
汇编
链接
hello.c 预处理—> hello.i 编译—> hello.s 汇编—> hello.o 链接—> hello - GCC编译流程
gcc [optio | filename]
option:
-E:可以使编译器在预处理结束时就停止编译。
-o:指的是目标文件。
-S:可以使编译器完成编译时就停止。
-c:汇编阶段
gcc -E -o a.i a.c(预处理)
gcc -S -o a.s a.i(编译)
gcc -c a.s -o a.o(汇编)
gcc a.o -o a(链接) - GCC警告提示
主要分为两类:-Wall类警告、非-Wall类警告
-Wall类警告:主要如下
-Wall:打开所有类型语法警告
非-Wall类警告:主要两个如下
-ansi:该选项强制GCC生成标准语法要求的警告信息。
-pedantic:该选项允许发出ANSI C标准所列出的全部警告信息。 - GCC使用函数库
Linux中函数库包括两类:静态库和共享库
静态库的代码在编译时就已经连接到开发人员开发的应用程序中(后缀名.a),而共享库是在程序开始运行时被加载(后缀名.so和版本号)。
加路径:
-I<目录>:在头文件的搜索列表中添加***目录,这样,GCC就会到指定的目录去查找相应的头文件。(eg:gcc hello.c -I/root/workplace/gcc/ -o hello)路径名中不包括文件名
在include语句中,<>表示在标准路径中搜索头文件,在Linux中默认为/usr/include,
-L<目录>:用于指明库文件的路径。假如程序需要用到目录/root/workplace/gcc/lib(eg:gcc hello.c -L/root/workplace/gcc/lib -lsunq -o hello)路径名中不包括文件名。
使用不同链接库,库名相同的静态库文件和共享库文件,链接时调用共享库,linux默认采用非动态链接的方式。(-l小写的L)
-static -l:连接同名静态库。