`
lobin
  • 浏览: 425753 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C 第10000章:GCC

 
阅读更多
写道

 

写道

 

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

 

更详细的资料可以参考

写道
GCC online documentation
https://gcc.gnu.org/onlinedocs

 

写道
Using the GNU Compiler Collection (GCC)
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

 

0
1
分享到:
评论

相关推荐

    C语言入门教程 第1章:C语 言简介

    第1章:C语 言简介C语言入门教程 第1章:C语言简介 C语言是一种通用的编程语言,由Dennis Ritchie在20世纪70年代初开发。它广泛用于系统软件和应用程序软件的编写。 第2章:环境搭建 安装开发工具 对于Windows:...

    C语言入门教程 第1章:C语言简介 C语言是一种通用的编程语言,由Dennis Ritchie在20世纪70年代初开发 它广泛用

    第1章:C语 言简介 C语言是一种通用的编程语言,由Dennis Ritchie在20世纪70年代初开发。它广泛用于系统软件和应用程序软件的编写。 第2章:环境搭建 安装开发工具 对于Windows: 可以使用MinGW或者Visual Studio。...

    著名的开源的C/C++编译器:GCC!

    著名的开源的C/C++编译器:GCC!

    gcc编译器20220506 082534 版本为:gcc-arm-none-eabi-10.3-2021.10-win32

    gcc编译器20220506 082534 版本为:gcc-arm-none-eabi-10.3-2021.10-win32 配合文章:nordic52832 nordic使用gcc编译环境搭建和使用说明

    实验10:gcc编译器的使用与编程环境.pdf

    实验10:gcc编译器的使用与编程环境.pdf

    GCC 中文手册.pdf

    - **标准库**:GCC包含C和C++的标准库,如libstdc++,并支持其他第三方库的链接。 **GCC扩展** - **GCC插件**:GCC支持编写插件,允许用户自定义编译器行为,如添加新的诊断或优化。 - **Mudflap和Sanitizers**:...

    Linux离线安装redis所需的依赖:gcc-c++.tar.gz,gcc.tar.gz,redis-5.0.4.tar.gz

    2. **gcc.tar.gz**:这是GCC(GNU Compiler Collection)的源代码包,它是Linux系统中最常用的C、C++、Fortran等编程语言的编译器。在编译Redis源代码时,需要GCC来将源代码转换为可执行二进制文件。 接下来,我们...

    gcc manual gcc手册

    GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada以及Go等。GCC手册是学习和使用GCC的重要参考资料,它详细阐述了GCC的功能、配置、使用方法以及相关的编译技巧。 GCC手册中的知识点非常丰富,涵盖了...

    Linux系统编程实验二:gcc、gdb的使用以及Makefile文件的编写.doc

    通过本实验,学生将学会使用gcc编译器将C语言源代码编译成可执行文件,并使用gdb调试器对程序进行调试,最后使用Makefile文件来对程序进行编译和链接。 1. gcc编译器的使用 gcc编译器是Linux系统下的一个常用的...

    gcc manual 手册

    编程语言支持:GCC支持包括C语言、C++语言、Objective-C和Objective-C++语言以及Go语言。对于每种语言,GCC都旨在遵循相应的标准。 语言标准:GCC支持各种版本的C语言(如C90、C99、C11)和C++语言(如C++98、C++03...

    GCC中文手册_GCCManual_gcc手册_

    GCC支持C、C++、Objective-C、Fortran、Ada、Go等多种编程语言,并且在开源社区中广泛使用。本手册将深入探讨GCC的各个方面,帮助读者理解和掌握其功能与用法。 1. **编译过程**:GCC的编译过程包括预处理、编译、...

    GCC manual

    1. **C语言**:GCC支持ANSI C标准,并提供了对C99、C11等版本的支持。 2. **C++语言**:GCC支持C++标准,包括C++98、C++03、C++11、C++14等多个版本。 3. **Objective-C和Objective-C++语言**:这两种语言都是基于...

    GCC文档英文版 - gcc使用手册 - gcc文档

    8. **多语言支持**:GCC不仅支持C语言,还有对C++、Objective-C等其他语言的支持。手册会解释每种语言的特性和编译差异。 9. **性能优化**:GCC提供了高级的代码优化技术,如循环展开、内联函数等。手册会指导如何...

    GCC-The Complete Reference

    2. **GCC支持的语言**:GCC不仅支持C语言,还支持C++、Objective-C、Objective-C++、Fortran、Ada、Go、D等多种编程语言。每个语言都有其特定的编译选项和特性。 3. **编译过程**:GCC通过预处理、编译、汇编和链接...

    GCC 中文手册电子书

    GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada、Go和D等,并且可以针对各种操作系统和处理器架构进行编译。 GCC中文手册是GCC用户和开发者的重要参考资料,它提供了详尽的编译器使用指南、选项说明...

    gcc 入门 (An Introduction to GCC)

    - **文件扩展名**:GCC根据源文件的扩展名自动识别其语言类型,例如`.c`代表C语言源文件,`.cpp`或`.cc`代表C++源文件。 #### 五、编译C程序的基本步骤 - **编写源代码**:首先需要创建一个或多个包含程序逻辑的...

    GCC入门到精通

    GCC入门到精通 GCC是GNU Compiler Collection的缩写,GNU编译器套件,是由GNU开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。...gcc -c test2.c(默认生成test2.o)

    gcc9.1.0-9.3.0.rar全集

    GCC支持多种编程语言,如C、C++、Fortran、Objective-C、Ada以及Go等,是开源社区的重要组成部分,尤其在Linux系统中广泛应用。 GCC 9.1.0至9.3.0版本的发布间隔中,开发者们进行了一系列的性能优化和功能增强,...

Global site tag (gtag.js) - Google Analytics