简述
gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。
常用参数(大小写敏感)
参数 | 作用 |
---|---|
-o | 重定向目标文件 |
-E | 只进行预处理,产物: *. |
-S | 编译器执行完编译操作后停止,产物: *.s |
-c | 编译器执行完汇编操作后停止,产物 *.o |
-Wall | 使gcc对源文件的代码有问题的地方发出警告 |
-Idir | 将dir加入到头文件搜索路径中 |
-Idir | 加入到头文件搜索路径中 |
-Ldir | 将dir加入到第三方库搜索路径中 |
-ldir | 链接lib库,库只写库名(如库名为libcurl.so.1,填写内容为-lcurl) |
-glevel | 链接lib库,库只写库名(如库名为libcurl.so.1,填写内容为-lcurl) |
注:加粗部分为参数
实例
1. gcc -E hello.c -o hello.i 对hello.c文件进行预处理,生成了hello.i 文件
2. gcc -S hello.i -o hello.s 对预处理文件进行编译,生成了汇编文件
3. gcc -c hello.s -o hello.o 对汇编文件进行编译,生成了目标文件
4. gcc hello.o -o hello 对目标文件进行链接,生成可执行文件
5. gcc hello.c -o hello 直接编译链接成可执行目标文件
进阶参数
参数 | 作用 |
---|---|
-pipe | 编译过程中使用管道功能减少临时文件产生 |
-O -O2 -O3 | 打开优化,不能与-g同时使用,出现多个优化时以最后为准 |
-O0 | 关闭所有优化 |
-v | gcc版本及相关配置信息 |
-w | 禁止所有报警 |
-ggdb | 尽可能生成gdb可以使用的调试信息 |
-share | 尽量使用动态库,默认为此选项 |
-static | 全部使用静态库 |
-shared | 产生动态库文件 |
-fPIC | 生成位置无关代码,编译动态库时使用(多个动态库冲突问题) |
-fPIE | 生成位置无关代码,编译生成二进制可执行文件时使用 |
-Wl | 后续内容作为参数传递给动态链接器 |
–verbose | 打印出编译链接的详细信息 |
库生成使用可以参考:Linux环境C++编译第三方库调用