Linux gcc命令的具体使用

01. 命令概述

gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。

gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go语言和D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

02. 命令格式

用法:gcc [选项] 文件...

03. 常用选项

 -pass-exit-codes     在某一阶段退出时返回最高的错误码
 --help          显示此帮助说明
 --target-help      显示目标机器特定的命令行选项
 --help={common|optimizers|params|target|warnings|[^]
 {joined|separate|undocumented}}[,...]
              显示特定类型的命令行选项
 (使用‘-v --help'显示子进程的命令行参数)
 --version        显示编译器版本信息
 -dumpspecs        显示所有内建 spec 字符串
 -dumpversion       显示编译器的版本号
 -dumpmachine       显示编译器的目标处理器
 -print-search-dirs    显示编译器的搜索路径
 -print-libgcc-file-name 显示编译器伴随库的名称
 -print-file-name=<库>  显示 <库> 的完整路径
 -print-prog-name=<程序> 显示编译器组件 <程序> 的完整路径
 -print-multiarch     Display the target's normalized GNU triplet, used as
              a component in the library path
 -print-multi-directory  显示不同版本 libgcc 的根目录
 -print-multi-lib     显示命令行选项和多个版本库搜索路径间的映射
 -print-multi-os-directory 显示操作系统库的相对路径
 -print-sysroot      显示目标库目录
 -print-sysroot-headers-suffix 显示用于寻找头文件的 sysroot 后缀
 -Wa,<选项>        将逗号分隔的 <选项> 传递给汇编器
 -Wp,<选项>        将逗号分隔的 <选项> 传递给预处理器
 -Wl,<选项>        将逗号分隔的 <选项> 传递给链接器
 -Xassembler <参数>    将 <参数> 传递给汇编器
 -Xpreprocessor <参数>  将 <参数> 传递给预处理器
 -Xlinker <参数>     将 <参数> 传递给链接器
 -save-temps       不删除中间文件
 -save-temps=<arg>    不删除中间文件
 -no-canonical-prefixes  生成其他 gcc 组件的相对路径时不生成规范化的
              前缀
 -pipe          使用管道代替临时文件
 -time          为每个子进程计时
 -specs=<文件>      用 <文件> 的内容覆盖内建的 specs 文件
 -std=<标准>       指定输入源文件遵循的标准
 --sysroot=<目录>     将 <目录> 作为头文件和库文件的根目录
 -B <目录>        将 <目录> 添加到编译器的搜索路径中
 -v            显示编译器调用的程序
 -###           与 -v 类似,但选项被引号括住,并且不执行命令
 -E            仅作预处理,不进行编译、汇编和链接
 -S            编译到汇编语言,不进行汇编和链接
 -c            编译、汇编到目标代码,不进行链接
 -o <文件>        输出到 <文件>
 -pie           Create a position independent executable
 -shared         Create a shared library
 -x <语言>        指定其后输入文件的语言
              允许的语言包括:c c++ assembler none
              ‘none'意味着恢复默认行为,即根据文件的扩展名猜测
              源文件的语言

04. 参考示例

4.1 生成默认的可执行文件

[deng@localhost bak]$ gcc test.c
[deng@localhost bak]$

将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

4.2 指定输出文件

[deng@localhost bak]$ gcc test.c -o test
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c
[deng@localhost bak]$

将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

4.3 仅作预处理,不进行编译、汇编和链接

[deng@localhost bak]$ gcc -E test.c -o test.i
[deng@localhost bak]$ 

将test.c预处理输出test.i文件。

4.4 编译到汇编语言,不进行汇编和链接

[deng@localhost bak]$ gcc -S test.c -o test.s
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c test.i test.s
[deng@localhost bak]$ 

将预处理输出文件test.i汇编成test.s文件。

4.5 编译、汇编到目标代码,不进行链接

[deng@localhost bak]$ gcc -c test.c -o test.o
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c test.i test.o test.s
[deng@localhost bak]$ 

4.6 将目标代码生成可执行文件

[deng@localhost bak]$ gcc test.o -o test
[deng@localhost bak]$ 

将编译输出文件test.o链接成最终可执行文件test。

4.7 编译时指定优化级别

[deng@localhost bak]$ gcc -O1 test.c -o test
[deng@localhost bak]$ 

使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

4.8 多文件编译

[deng@localhost bak]$ gcc testfun.c test.c -o test
[deng@localhost bak]$ 

将testfun.c和test.c分别编译后链接成test可执行文件。

4.9 多文件编译方法二

[deng@localhost bak]$ gcc -c test.c
[deng@localhost bak]$ gcc -c testfun.c
[deng@localhost bak]$ gcc test.o testfun.o -o test
[deng@localhost bak]$ 

到此这篇关于Linux gcc命令的具体使用的文章就介绍到这了,更多相关Linux gcc命令内容请搜素我们以前的文章或下面相关文章,希望大家以后多多支持我们!

(0)

相关推荐

  • Linux系统中安装gcc和kernel-devel的方法

    gcc:liunx环境中的c/c++编译器,安装软件需要它 kernel-devel:linux内核,安装软件时需要编译内核,故需要保持内核版本一致性 1.Linux操作系统安装好以后,查看gcc是否已经安装: # gcc -v //如果后面出现一大段,则已经安装: 2.查看内核是否一致: #uname -r #rpm -q kernel-devel 如果两个命令得到的版本号一致,那么恭喜你可以直接安装Vmware Tools了:不过一般情况下,两个版本是不一致的,或者是提示kernel-dev

  • linux使用gcc编译c语言共享库步骤

    对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例如一个数据库服务器的接口,就像MySQL. 大部分大型的软件项目都会包含若干组件,其中一些你发现可以用在其他项目中,又或者你仅仅出于组织目的将不同组件分离出来.当你有一套可复用的并且逻辑清晰的函数时,将其构建为一个库会十分有用,这样你就不将这些源代码拷贝到你的源代码中,而且每次都要再次编译它们.除此之外,你还可以保证你的程序各模块隔离,这

  • Linux 在线安装软件 gcc在线安装的操作方法

    Linux在线安装相关命令: yum install:全部安装 yum install <程序包>:安装指定的程序包 yum groupinsall <程序组>:安装程序组 yum -y update:升级所有包,改变软件设置和系统设置,系统版本.内核都升级 yum -y upgrade:升级所有包,不改变软件设置和系统设置,系统版本升级,内核不升级 yum update <程序包>:更新指定的程序包 yum check-update:检查可更新的程序 yum upgr

  • 关于安装linux redhat后无法使用yum命令安装gcc-c++问题的解决过程

    初入职场,给linux redhat安装环境的时候,遇到这么个问题 [root@localhost ~]# yum -y install gcc Loaded plugins: katello, product-id, security, subscription-manager Updating certificate-based repositories. Unable to read consumer identity Setting up Install Process No packa

  • Linux上安装GCC编译器过程

    2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0比以前版本更好地支持了C++标准.本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程. 安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器.如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0.如果是这种情况,可

  • 浅谈Linux环境下gcc优化级别

    代码优化可以说是一个非常复杂而又非常重要的问题,以笔者多年的linux c开发经验来说优化通常分为两个方面,一是人为优化,也就是基于编程经验采用更简易的数据结构函数等来降低编译器负担,二是采用系统自带的优化模式,也就是gcc - o系列,下面我将简述一下各级优化的过程以及实现. gcc - o1 首先o1上面还有一个o0,那个是不提供任何优化,项目中几乎不会使用,而o1使用就非常广泛了,o1是最基本的优化,主要对代码的分支,表达式,常量来进行优化,编译器会在较短的时间下将代码变得更加短小,这样体

  • Linux中 CentOS 6.5 手动升级gcc到gcc-6.1.0

    从进入码农时代已经有好几年了,一直没有写博文的习惯,用到的很多东西没有记录,到后面就忘了,需要用时,又不停上百度google一下,费时间又费精力,还不一定能找到满意的答案,因此开个博客记录下.(废话不多说了) 今天在公司服务器上源码安装Nodejs报错 WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++),直接yum update gcc不能升级到4.8,然后只能手动处理了. 开始,如果linux安装了wget命

  • Linux gcc命令的具体使用

    01. 命令概述 gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点. gcc是GNU编译器套件(GNU Compiler Collection),它包括了C.C++.Objective-C.Fortran.Java.Ada.Go语言和D语言的前端,也包括了这些语言的库(如libstdc++.libgcj等等).GCC的初衷是为GNU操作系统专门编写的一款编译器.GNU系统是彻底的自由软件.此处,"自由"的含义

  • Linux系统下gcc命令使用详解

    目录 一.预处理 二. 编译 三.汇编 四.链接 1.gcc的安装(以Ubuntu为例) sudo apt-get install build-essential 安装完后可以通过 gcc --version 查看版本. 让我们在通过gcc编译可执行文件的过程中掌握其基础应用. 准备: 先在当前目录下 使用vim新建一个.c文件 例如 666.c $ vim 666.c (vim的使用可在我的另一篇博客有详细的叙述,这里不多在赘述) 插入一段代码. #include <stdio.h> mai

  • linux lsof命令详解及实例

    linux lsof命令详解 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过

  • linux ar 命令的使用说明和实例讲解

    ar命令可以用来创建.修改库,也可以从库中提出单个模块.库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member).原始文件的内容.模式.时间戳 .属主.组等属性都保留在库文件中. ar可让您集合许多文件,成为单一的备存文件.在备存文件中,所有成员文件皆保有原来的属性与权限. 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中使用ar命令,一般写在makefile中,有时也会在shell脚 本中用到.关于Linux下的库文件

  • Linux常用命令之性能命令

    本文介绍Linux常用性能统计分析命令,监控进程或者系统性能.主要包括CPU(top.mpstat).内存(vmstat.free).I/O(iostat).网络性能(sar).系统日志信息(demsg).查看进程状态(pidstat).下面简要介绍这些命令的使用方法. mpstat.iostat.pidstat和sr命令需要安装sysstat软件包,sysstat包含了系统性能监测工具,安装方法如下: yum install sysstat # CentOS apt-get install s

  • 基于使用paramiko执行远程linux主机命令(详解)

    paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件. 关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上做一些封装,便于扩展与编写脚本. 下面直接给出代码: # coding: utf-8 import paramiko import re from time import sleep # 定义一个类,表示一台远端linux主机 class Linux(object): # 通过IP, 用户名,密码,

  • Linux traceroute命令使用方法实例详解

    Linux traceroute命令使用方法实例详解 一.默认使用的是UDP协议(30000以上端口) 二.使用TCP协议 -T -p 三.使用ICMP协议 -I 四.实战 [root@localhost hping-master]# whereis traceroute traceroute: /usr/bin/traceroute /usr/share/man/man8/traceroute.8.gz [root@localhost hping-master]# [root@localhos

  • linux tar命令简介

    一.使用介绍 tar命令用来打包,解包和压缩. 1.名词区分 打包:将一大堆文件或目录变成一个总的文件[tar命令] 压缩:将一个大的文件通过一些压缩算法变成一个小文件[gzip,bzip2等] Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令). 2.tar语法 语法:tar [主选项+辅选项] 文件或目录 使用该命令时,主选项必须有,它告诉tar要做什么事情,辅选项

  • linux shutdown命令详解

    shutdown命令用来系统关机命令.shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作. 语法 shutdown(选项)(参数) 选项 -c:当执行"shutdown -h 11:50"指令时,只要按+键就可以中断关机的指令: -f:重新启动时不执行fsck: -F:重新启动时执行fsck: -h:将系统关机: -k:只是送出信息给所有用户,但不会实际关机: -n:不调用init程序进行关机,而由shutdown自己进行: -r:shutdown之后重新启

  • linux mkdir命令详解

    mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录:如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录.在创建目录时,应保证新建的目录与它所在目录下的文件没有重名. 注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件.最好采用前后一致的命名方式来区分文件和目录.例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面. 在一个子目录

随机推荐