gcc
可以通过
>gcc --help
查看详细的帮助。还可以通过:
gcc --target-help
gcc --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
查看自己想要的信息。
如:
>gcc --help=target
>gcc --help=optimizers
>gcc --help=warnings
>gcc --help=params
>gcc --help=joined
>gcc --help=separate
>gcc --help=undocumented
更详细的资料可以参考
https://gcc.gnu.org/onlinedocs
https://gcc.gnu.org/onlinedocs/gcc
>gcc --help=target
相关帮助信息:
-mconsole
Create console application
创建控制台应用
-mwindows
Create GUI application
创建图形化GUI应用
如果有控制台输出的话,如果没有指定这个选项,会同时显示这个控制台输出。如果指定了这个选项,会隐藏这个控制台输出。
>gcc --help=optimizers
相关帮助信息:
-fpack-struct
这个跟内存对齐有关。
-fpack-struct=<number>
这个跟内存对齐有关。
>gcc --help=warnings
相关帮助信息:
>gcc --help=params
相关帮助信息:
>gcc --help=joined
相关帮助信息:
全局宏定义
-D<macro>[=<val>]
-U<macro>
Undefine <macro>
可以通过>gcc --help=joined查看帮助。
指定include路径
-I <dir>
-F <dir>
-march=
生成指定CPU架构的代码
-masm=
使用指定汇编器的方言
>gcc --help=separate
相关帮助信息:
>gcc --help=undocumented
相关帮助信息:
C语言版本
编译:
gcc -c server.c -o server.o
链接,生成可执行文件:
gcc server.o -o server
以上都是单个文件的编译链接
以下例子中,buffer.c源程序文件中没有定义main函数,所以在编译后,尝试链接成可执行文件时将报如下错误:
gcc -c buffer.c -o buffer.o
gcc buffer.o -o buffer
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o): In function `main':
/usr/src/debug/cygwin-1.7.18-1/winsup/cygwin/lib/libcmain.c:39: undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status
只编译,不装配和连接
void test()
{
}
>gcc -S stacktest.c -o stacktest.S
.file"stacktest.c"
.text
.globl _test
.def_test;.scl2;.type32;.endef
_test:
pushl%ebp
movl%esp, %ebp
popl%ebp
ret
main函数编译后的汇编代码
void main()
{
}
>gcc -S stacktestmain.c -o stactestmain.S
.file"stacktestmain.c"
.def___main;.scl2;.type32;.endef
.text
.globl _main
.def_main;.scl2;.type32;.endef
_main:
pushl%ebp
movl%esp, %ebp
andl$-16, %esp
call___main
movl%ebp, %esp
popl%ebp
ret
int main()
{
return 0;
}
>gcc -S stacktestmain1.c -o stactestmain1.S
.file"stacktestmain1.c"
.def___main;.scl2;.type32;.endef
.text
.globl _main
.def_main;.scl2;.type32;.endef
_main:
pushl%ebp
movl%esp, %ebp
andl$-16, %esp
call___main
movl$0, %eax
movl%ebp, %esp
popl%ebp
ret
int main()
{
}
>gcc -S stacktestmain2.c -o stactestmain2.S
.file"stacktestmain2.c"
.def___main;.scl2;.type32;.endef
.text
.globl _main
.def_main;.scl2;.type32;.endef
_main:
pushl%ebp
movl%esp, %ebp
andl$-16, %esp
call___main
movl%ebp, %esp
popl%ebp
ret
另一篇文章:https://lobin.iteye.com/blog/2441299
多文件
编译,同时编译多个文件
gcc -c *.c
gcc -c */*.c
链接,将多个文件链接起来生成可执行文件
gcc *.o -o server
指定C语言版本标准
$ gcc -ansi -pedantic test.c -o test
$ gcc -std=c90 -pedantic test.c -o test cc1: error: unrecognized command line option "-std=c90"
$ gcc -std=iso9899:1990 -pedantic test.c -o test
更多gcc相关信息可参考:https://lobin.iteye.com/blog/2038516
gcc内建函数(built-in function)
如果没有包含#include <stdio.h>,通过gcc可以通过编译、链接生成可执行程序,而且运行通过。但编译时产生以下告警信息:
client.c:10:2: warning: incompatible implicit declaration of built-in function
‘printf’
printf
cc
cc其实只是指向gcc的一个链接。
# ll /usr/bin/cc
lrwxrwxrwx. 1 root root 3 Sep 28 2019 /usr/bin/cc -> gcc
当然我们也可以改变这个链接指向,比如指向g++
# ln -s /usr/bin/g++ /usr/bin/cc
# ll /usr/bin/cc
lrwxrwxrwx. 1 root root 12 Sep 25 09:04 /usr/bin/cc -> /usr/bin/g++
CC=gcc
CC=gcc -std=c99
1、2 Language Standards Supported by GCC, https://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards
2、https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
相关推荐
第1章:C语 言简介C语言入门教程 第1章:C语言简介 C语言是一种通用的编程语言,由Dennis Ritchie在20世纪70年代初开发。它广泛用于系统软件和应用程序软件的编写。 第2章:环境搭建 安装开发工具 对于Windows:...
第1章:C语 言简介 C语言是一种通用的编程语言,由Dennis Ritchie在20世纪70年代初开发。它广泛用于系统软件和应用程序软件的编写。 第2章:环境搭建 安装开发工具 对于Windows: 可以使用MinGW或者Visual Studio。...
著名的开源的C/C++编译器:GCC!
gcc编译器20220506 082534 版本为:gcc-arm-none-eabi-10.3-2021.10-win32 配合文章:nordic52832 nordic使用gcc编译环境搭建和使用说明
实验10:gcc编译器的使用与编程环境.pdf
- **标准库**:GCC包含C和C++的标准库,如libstdc++,并支持其他第三方库的链接。 **GCC扩展** - **GCC插件**:GCC支持编写插件,允许用户自定义编译器行为,如添加新的诊断或优化。 - **Mudflap和Sanitizers**:...
2. **gcc.tar.gz**:这是GCC(GNU Compiler Collection)的源代码包,它是Linux系统中最常用的C、C++、Fortran等编程语言的编译器。在编译Redis源代码时,需要GCC来将源代码转换为可执行二进制文件。 接下来,我们...
GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada以及Go等。GCC手册是学习和使用GCC的重要参考资料,它详细阐述了GCC的功能、配置、使用方法以及相关的编译技巧。 GCC手册中的知识点非常丰富,涵盖了...
通过本实验,学生将学会使用gcc编译器将C语言源代码编译成可执行文件,并使用gdb调试器对程序进行调试,最后使用Makefile文件来对程序进行编译和链接。 1. gcc编译器的使用 gcc编译器是Linux系统下的一个常用的...
编程语言支持:GCC支持包括C语言、C++语言、Objective-C和Objective-C++语言以及Go语言。对于每种语言,GCC都旨在遵循相应的标准。 语言标准:GCC支持各种版本的C语言(如C90、C99、C11)和C++语言(如C++98、C++03...
GCC支持C、C++、Objective-C、Fortran、Ada、Go等多种编程语言,并且在开源社区中广泛使用。本手册将深入探讨GCC的各个方面,帮助读者理解和掌握其功能与用法。 1. **编译过程**:GCC的编译过程包括预处理、编译、...
1. **C语言**:GCC支持ANSI C标准,并提供了对C99、C11等版本的支持。 2. **C++语言**:GCC支持C++标准,包括C++98、C++03、C++11、C++14等多个版本。 3. **Objective-C和Objective-C++语言**:这两种语言都是基于...
8. **多语言支持**:GCC不仅支持C语言,还有对C++、Objective-C等其他语言的支持。手册会解释每种语言的特性和编译差异。 9. **性能优化**:GCC提供了高级的代码优化技术,如循环展开、内联函数等。手册会指导如何...
2. **GCC支持的语言**:GCC不仅支持C语言,还支持C++、Objective-C、Objective-C++、Fortran、Ada、Go、D等多种编程语言。每个语言都有其特定的编译选项和特性。 3. **编译过程**:GCC通过预处理、编译、汇编和链接...
GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada、Go和D等,并且可以针对各种操作系统和处理器架构进行编译。 GCC中文手册是GCC用户和开发者的重要参考资料,它提供了详尽的编译器使用指南、选项说明...
- **文件扩展名**:GCC根据源文件的扩展名自动识别其语言类型,例如`.c`代表C语言源文件,`.cpp`或`.cc`代表C++源文件。 #### 五、编译C程序的基本步骤 - **编写源代码**:首先需要创建一个或多个包含程序逻辑的...
GCC入门到精通 GCC是GNU Compiler Collection的缩写,GNU编译器套件,是由GNU开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。...gcc -c test2.c(默认生成test2.o)
GCC支持多种编程语言,如C、C++、Fortran、Objective-C、Ada以及Go等,是开源社区的重要组成部分,尤其在Linux系统中广泛应用。 GCC 9.1.0至9.3.0版本的发布间隔中,开发者们进行了一系列的性能优化和功能增强,...