gcc 参数

2023-05-16

gcc

gcc与 g++ 分别是GNU的C与 C++ 的编译器,在编译工作中分4步:
1. 预处理,生成.i文件
2. 编译器,编译后停下来,生成.o的目标文件
3. 汇编器,汇编后停下来,生成.s的汇编文件

4. 连接器,链接目标代码,生成可执行程序

gcc使用格式

 gcc [-c|-S|-E] [-std=standard]
       [-g] [-pg] [-Olevel]
       [-Wwarn...] [-pedantic]
       [-Idir...] [-Ldir...]
       [-Dmacro[=defn]...] [-Umacro]
       [-foption...] [-mmachine-option...]
       [-o outfile] [@file] infile...

简单的例子:gcc test.c -o test

常用参数说明

-o:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
-g: 产生符号调试工具(GNU的gdb)所需要的符号信息,想要对源码进行调试,必须加入该项
-O: 对程序进行优化编译、链接
-Idirname: 将dirname所指的目录加入到程序头文件目录列表中,在预编译过程中使用的参数
-Ldirname: 将dirname所指的目录加入到程序函数库文件的目录列表中
-lname: 链接时装载名为libname.a的函数库
-M: 生成文件关联的信息,查看依赖文件
-ggdb: 尽可能的生成gdb使用的额外调试信息
-static: 禁止使用动态库,所有,编译出来的东西比较大
-share: 尽可能的使用动态库

举例:

输出预处理结果到文件:
    gcc -E test.c -o test.i
-Idirectory设置头文件(.h)的搜索路径:
    gcc -g -I./lib -I/usr/local/include/cbase main.c mylib.c
将C源代码编译成汇编语言(S):
    gcc -S test.c
将多个文件链接成一个可执行文件:
    gcc -g -c main.c test.c 
链接其他的库:
    gcc -g -o test main.c ./libmy.so ./libtest.a
参数 -g 在对象⽂文件 (.o) 和执⾏行⽂文件中⽣生成符号表和源代码⾏行号信息,以便使⽤用 gdb 等⼯工具进⾏行调
试:
    gcc -g -o test main.c mylib.c
    readelf -S test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc 参数 的相关文章

  • 使用 AVX 内在函数代替 SSE 并不能提高速度 - 为什么?

    我已经使用 Intel 的 SSE 内在函数相当长一段时间了 并取得了良好的性能提升 因此 我希望 AVX 内在函数能够进一步加速我的程序 不幸的是 直到现在情况并非如此 可能我犯了一个愚蠢的错误 所以如果有人能帮助我 我将非常感激 我使用
  • 软件预取手动指令合理的场景

    我读过有关 x86 和 x86 64 Intel 的内容gcc提供特殊的预取指令 include
  • 错误:“std::this_thread”尚未声明

    我尝试使用 std this thread sleep for 函数但收到错误 error std this thread has not been declared 包括标志 GLIBCXX USE NANOSLEEP 还需要什么来强制它
  • sfinae 与 decltype:clang 或 gcc 中的错误?

    Clang 3 2 可以编译并且代码的行为符合预期 struct have f int f int i return 10 struct empty template
  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • 带有适用于 MS-Windows 的工具链的预构建 MIPS 交叉编译器

    我在我的 Linux 机器上使用 MIPS 交叉编译器 效果很好 现在我需要在 Windows 上编译相同的应用程序 我正在网上搜索一些适用于 MS Windows 的预构建 MIPS 交叉编译器 带有工具链 但没有成功 由于我不确定该怎么
  • INT_MIN % -1 是否会产生未定义的行为?

    gcc 生成浮动代码 引发SIGFPE对于以下代码 include
  • 如何将输入传递到扩展汇编中?

    考虑这段代码 来自我的先前的问题 https stackoverflow com questions 37955538 segfault on movq instruction int main asm movq 100000000 rcx
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 包括带有大量全局变量的 C 头文件

    我有一个包含 100 多个全局变量的包含文件 它正在库中使用 但我链接库的一些程序也需要访问全局变量 它的构建方式 In one library c file define Extern In the programs that use t
  • 为什么是 ”\?” C/C++ 中的转义序列?

    C C 中有四种特殊的非字母字符需要转义 单引号 双引号 反斜杠 和问号 显然是因为它们有特殊的含义 对于单身char 对于字符串文字 对于转义序列 但为什么是 其中之一 我今天读了教科书上的转义序列表 我意识到我已经never逃脱了 以前
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • clang 是否提供类似于 GCC 6.x 的函数多版本控制 (target_clones) 的功能?

    我读了这篇 LWN 文章 https lwn net Articles 691932 饶有兴趣 执行摘要 GCC 6 x 支持所谓的函数多版本控制 它可以构建同一函数的多个版本 并针对不同的指令集进行优化 假设您有一台支持 AVX2 的机器
  • gcc 与 clang:符号剥离

    gcc 和 AMD Open64 opencc 都有一个 s选项 剥离符号表和重定位信息 到目前为止我还没能在 Clang LLVM 中找到相同的选项 它存在吗 您可以使用stripbinutils 中的实用程序 实际上 llvm ld 有
  • 为什么 gcc 链接时没有 lpthread 标志?

    我当时正在做一个业余爱好项目 其中互斥体的行为很神秘 我将其归结为这个显然应该陷入僵局的测试用例 include
  • 无法链接 Boost 正则表达式

    我目前正在尝试编译一个KIT 的收缩层次实现 http algo2 iti kit edu english routeplanning php这需要 Boost Regex 提供的 Makefile 已经确保 并且我还手动仔细检查了这一点
  • 要求编译器发出无分支/恒定时间代码

    在密码学中 任何依赖于秘密数据 例如私钥 的代码都必须在恒定时间内执行 以避免侧信道定时攻击 https en wikipedia org wiki Timing attack 目前最流行的架构 x86 64 和 ARM AArch64 都
  • 链接器问题 - 未定义的引用

    我的编译器有问题 告诉我有一个 未定义的引用 我想在库中使用的函数 让我分享一些有关该问题的信息 我正在用 gcc 交叉编译 C 语言 我正在调用一个库函数 该函数通过包含的标头访问 其中包含另一个标头 其中包含原型 我已经使用 I 包含了
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 如何使用 MSYS2 获取旧版本的软件包?

    我决定尝试 CLion for Windows 它推荐使用 MinGW 或 Cygwin 进行编译 我安装了MSYS2 http sourceforge net p msys2 wiki MSYS2 20installation 包管理器进

随机推荐

  • select函数当对端关闭后的状态

    struct timeval timeout 61 5 0 rset 61 allset nready 61 select maxfd 43 1 amp rset NULL NULL amp timeout 当使用select等待客户端发送
  • web渗透之攻击 Authentication-1-

    可利用常见漏洞 认证http明文传输 xff0c 未加密 xff0c 攻击者可通过中间人攻击获取默认密码弱口令 xff0c 简单的credentials xff0c 可以通过暴力破解获取通过其他漏洞绕过认证不正确的重置密码功能密码在本地存储
  • UART——学习总结

    UART 一 含义 xff1a 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 二 工作原
  • 海康威视web3.0+vue项目使用(踩坑之路)ps:附webVideoCtrl.js文件

    文章目录 1 海康威视web3 02 vue项目应用3 运行环境 最近公司开发了一版监控视频的vue项目 我作为实现需求的前端真的是难为我了 各种调查后知道海康威视有web开发包 跟海康威视的SDK联系后发给我两个web二次开发包 CH W
  • GB28181国标平台软件(包含服务器和客户端)

    GB28181是国家针对安防领域制定的一个通信协议标准 xff0c 目的是解决不同平台 不同设备间通信协议不统一的问题 GB28181标准从2011制定的第一个版本开始 xff0c 到最近的2016版本 xff0c 制定的协议内容越来越细
  • 国标服务器GBServerPlatform对接海康NVR的操作说明

    这一篇文章介绍QuickGBLink开发的国标服务器如何对接海康NVR xff08 网络硬盘录像机 xff09 xff0c 主要讲解相关的操作步骤 xff08 GBT28181平台软件下载地址 xff1a https github com
  • 国标服务器GBServerPlatform对接海康摄像头的操作说明

    这篇文章讲解一下QuickGBLink开发的国标服务器如何对接海康IPC xff08 GBT28181国标平台软件下载地址 xff1a https github com QuickGBLink88 GB28181 ServerPlatfor
  • 开源工具:ONVIF协议实现搜索局域网摄像机(IPC)+RTSP地址获取

    Onvif协议做安防监控的人应该都很熟悉 xff0c 它广泛被用在各种安防设备中 xff0c 比如IPC DVR NVR 在局域网中发现IPC设备很多就是基于Onvif协议实现的 本文章给大家介绍QuickGBLink开源的一个工具 xff
  • 开源C++ RTSP客户端(支持RTP Over TCP)

    QuickGBLink开源的这个RTSP客户端是用C 43 43 写的 xff0c 目前仅实现了RTP Over TCP传输 支持接收多种视音频格式的流 xff0c 视频格式支持MPEG4 H264 H265 xff0c 音频格式支持AAC
  • 开源工具:实现用FFmpeg接收RTSP/RTMP/HLS流和录制文件

    上一篇文章介绍了QuickGBLink开发的一个RTSP客户端 开源C 43 43 RTSP客户端 xff0c 实现了通过TCP接收RTP流的功能 xff0c 但是在局域网监控中 xff0c 很多时候RTSP服务器和客户端都是用UDP模式来
  • 国标PS流打包和RTP发送代码

    这个国标PS流打包 封包的代码来自于互联网 xff0c QuickGBLink在原先代码基础上做了一些改进 因为代码来自于别人的成果 xff0c 基于互联网知识分享的精神 xff0c 我们打算将其开源 xff0c 希望能对更多学习和开发国标
  • 国标PS流解包(解封装)代码

    该代码最初的版本来自于互联网 xff0c 首先感谢前辈无私分享的精神 xff0c 这个PS流解析代码小巧和可读性好 xff0c 是学习PS格式的一个很好的参考例子 但原来的代码有不少Bug xff0c QuickGBLink在原先代码基础上
  • 错误./hello: error while loading shared libraries: libQtGui.so.4: cannot open shared object file:

    之前一直想在ARM 上跑qt xff0c 但都出现错误 xff1a hello error while loading shared libraries libQtGui so 4 cannot open shared object fil
  • linux eth0设置

    命令行设定IP地址 ifconfig eth0 192 168 1 12 将eth0IP设置为192 168 1 12 ifconfig eth0 up 使eth0使能 如果开发板与路由器连接 xff0c 并且路由器能够自动分配IP地址 x
  • printk打印不能显示到终端的解决方法

    printk与printf有个不同的地方 xff0c 就是printk有打印级别 使用printk时 xff0c Linux内核根据日志级别 xff0c 可能把消息打印到当前控制台上 xff0c 这个控制台是一个字符设备 这些消息从终端输出
  • qt socket通信中接收client发送是十六进制数据包

    在QT的服务端接收客户端发送的十六进制收据包 xff0c 经转换后显示在LineEdit上 xff0c 并把接收到的数据包转化为char 类型 xff0c 为后期数据处理做准备 recbuf在头文件类中一定义 xff1a QByteArra
  • 两个双口ram之间数据的传递

    1 如果两个双口ram数据位宽相同 xff0c 则采用时钟快的ram等待时钟慢的ram来完成从一个ram中读取数据并存储到另一个ram中 xff1b 例如从ram A中读取数据到ram xff22 中 xff0c xff52 xff41 x
  • + - 与>> <<运算优先级

    43 运算符的优先级高于 lt lt gt gt 位移运算符 span class hljs keyword int span mian span class hljs keyword int span a 61 span class hl
  • linux col 过滤控制字符

    参考http blog 51cto com jim123 1833502 使用过Unix系统的人肯定会知道man帮助的功能强大 xff0c 是官方的帮助文档 xff0c 我们平时可以通过它来查询不知道如何使用的命令或者查询linux的系统C
  • gcc 参数

    gcc gcc与 g 43 43 分别是GNU的C与 C 43 43 的编译器 xff0c 在编译工作中分4步 xff1a 1 预处理 xff0c 生成 i文件 2 编译器 xff0c 编译后停下来 xff0c 生成 o的目标文件 3 汇编