首页 > 其他分享 >gcc编译步骤与常用参数

gcc编译步骤与常用参数

时间:2024-03-24 14:11:26浏览次数:23  
标签:gcc 头文件 步骤 常用 编译 include hello

1.gcc编译步骤与常用参数

image

1.1.编译步骤

  • 源码hello.c只有寥寥几行代码
#include <stdio.h>

int main(void)
{
    printf("hello\n");
}
  • 执行-E预处理,得到hello.i,生成了很长的.i文件

image

  • -S编译helloc.s,这一步是最重要的,得到的反汇编文件,可以看出很多问题:

image

  • -c汇编得到hello.o,知识将汇编指令翻译成机器指令,人看不懂

image

  • 最后一步链接得到ELF文件,进行1.数据段合并2.地址回填

image

1.2.常用指令选项

  1. -v 查看gcc版本号

  2. -I 指定头文件目录,注意ID和目录之间没有空格

image

hello.c依赖目录inc下的hello.h,使用gcc hello.c -o hello会报错:

image

​ 需要-I 指定头文件目录gcc hello.c -o hello -I./inc

补充说明——头文件守卫:比如这个hello.h被某源文件一直#include "hello.h"、#include "hello.h"... ...,利用头文件守卫可以保证源文件只include一次该头文件的内容,避免重复包含

image

  1. -c 只编译,生成.o文件,不进行链接

  2. -g 包含调试信息,配合gdb使用,见gdb常用使用总结

  3. -0n n=0~3 编译优化,n越大优化得越多

  4. -Wall 提示更多警告信息,-w取消所有警告

  5. -D 编译时定义宏,注意-D和之间没有空格,一般用于调试信息的开关

  6. -E 生成预处理文件

  7. -shared 制作动态库

  8. -fPIC 生成位置无关的代码

标签:gcc,头文件,步骤,常用,编译,include,hello
From: https://www.cnblogs.com/kongweisi/p/18092373

相关文章

  • FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
    ​《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2 交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需FFmpeg的so库。1、下载Linux版本的android-ndk-r21e登录Linux服务器(比如华为云的......
  • vue3 动态编译组件失败:Component provided template option but runtime compilation
    根据vue3官方文档路由,写了如下一个简单的页面来模拟路由的实现。为了减少*.vue文件的个数,在这个但页面中,使用defineComponent通过object定义组件。<scriptsetup>import{ref,computed,defineComponent}from'vue'constHome=defineComponent({template:`......
  • 项目步骤
    前端项目初始化步骤:安装vue脚手架(全局安装一次就可以一直使用)通过vue脚手架创建项目配置vue路由配置element-ui组件库配置axios库可视化的=>(windows+r打开运行面板输入cmd,在终端vueui)命令式的=>cmd创建项目 初始化git,用到的功能Babel,Router,使用配置文件......
  • 网站建设有哪些步骤,需要哪些资源,预算大概是多少?
    网站建设通常涉及以下步骤,每个步骤都需要相应的资源投入,预算也会根据这些步骤的具体需求和选择而变化:网站建设步骤: 1.需求分析:  资源:项目负责人、需求分析师、业务相关人员  工作内容:明确网站目标、定位、功能需求、内容结构、用户群体、技术要求等,形成详细的网站......
  • 自己编译RustDesk,并将自建ID服务器和key信息写入客户端
    前言:搭建RustDesk编译环境    今天总算是把编译环境给折腾清楚了,编译出来了至少能用,但说不上好用,问题还不少,官方的客户端就是要手工填写ID服务器地址和key才可以用,而且还容易被别人白嫖你搭建的服务器,当然如果拿到你编译后的客户端,也是存在被白嫖的可能。这方面还没......
  • ros2:手动编译包
    首先需要colcon库支持sudoaptinstallpython3-colcon-common-extensions github上拉个包(这里使用示例程序)gitclonehttps://github.com/ros2/examplessrc/examples-bfoxy其中-bfoxy代表选择foxy版本分支 编译colconbuild 进入包所在目录cd/src/ex......
  • FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
    FFmpeg支持Linux、macOS、Windows、Android等操作系统,其中Linux系列包括Ubuntu、Debian、Mint、CentOS、RHEL、Fedora等分支。FFmpeg官网的编译入口地址为https://trac.ffmpeg.org/wiki/CompilationGuide,在这里可以找到FFmpeg对各系统的编译说明。更多详细的FFmpeg开发知识参见《F......
  • C语言预编译#pragma宏的作用
    在嵌入式编程中,#pragma指令具有非常重要的作用,因为它允许开发者在不同的编译器之间传达特定的编译指令。由于嵌入式编程通常与硬件紧密相关,且资源有限,这些指令可以帮助开发者更有效地利用可用资源,优化程序,以及处理特定的硬件约束。以下是#pragma在嵌入式编程中的一些常见应用......
  • [c++/gcc] Centos 7.9升级 gcc 4.8.5 到 gcc11 [转]
    0序本文背景:因在centos7.9server上安装nodejs21.7.1,编译nodejs时,依赖了gnu17/gcc11。例如:遇到Qtrequiresc++11support、-std=gnu++17例如:编译器不支持c++17,就会提示:g++:error:unrecognizedcommandlineoption‘-std=c++17’例如:编译器不支持c++17,就会提示:g++:......
  • 使用ultraliso制作U盘启动工具步骤
    首先准备一个空U盘,iso文件,然后再ultraliso内部分别读取相应文件夹点击启动,写入硬盘驱动 点击写入 等待写入完成即可 ......