热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linuxgcc命令的具体使用

这篇文章主要介绍了Linuxgcc命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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=    不删除中间文件
 -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命令内容请搜素以前的文章或下面相关文章,希望大家以后多多支持!


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
author-avatar
陈苏女士
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有