GCC简介

GCC命令与参数详解 使用 GCC 需要对编译的四个阶段(编译过程),以及编译的规则有一定的了解,熟悉使用 GCC 对于编写 Makefile 具有决定性的作用。GCC 的命令使用非常灵活,命令都以 gcc 开头然后配合待编译文件名,编译选项即可(可以说 GCC 就只有一条命令,只是编译选项较多而已)。命令选项可以随意组合,只需要注意选项是否包含参数即可,如果选项包含参数则参数需要紧紧跟随在选项后方。 阅读详情

GCC简介

GCC编译过程

gcc编译过程分为4个阶段:预处理->编译->汇编->链接。

预处理

预处理器(cpp)根据以字符#开头的命令(directives),修改原始的C程序。预处理的指令为-E

gcc -E test.c -o test.i

编译

在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译 成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

gcc -S test.i -o test.s

汇编

汇编阶段是把编译阶段生成的”.s”文件转成目标文件。

gcc -c test.s -o test.o

链接

链接,生成可执行文件

gcc test.o -o test

GCC常用编译参数

-c

仅执行编译,不执行链接

-o

指定生成的输出文件

-O

编译优化:

-O0: 无优化

-O -O1: 基础级别优化

-O2: 更高一级的优化,一般程序推荐使用这个

-O3: 最高级别优化

更加详细的请参考:https://blog.youkuaiyun.com/boylinux/article/details/28986261

-g

编译的时候产生调试信息

-l(lmn中的l)

用来指定要链接的库, 后面紧跟库名,不留空格。

比如我们有库名为libtest.so, 那么可以这样链接:

-ltest

-L

查找库的目录。比如libtest.so放在/tmp/libtest.so:

-L/tmp -ltest

-I(大写的i)

GCC默认会从/usr/include中去找头文件,如果头文件不在/user/include中,那么就需要用-I去指定查找头文件的目录,比如

-I/myinclude

-Wall

生成所有警告信息

-w

关闭所有警告信息

-Werror

把所有的警告都作为错误处理

-v

-shared

生成共享目标文件。总是与-fPIC一起使用。

-fPIC

告诉编译器产生与位置无关代码(Position-Independent Code)

-static

此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么 动态连接库,就可以运行

-m32

生成32位机器的汇编代码

Linux应用(一)——GCC、静态库、动态库 gcc的使用、静态库的制作与使用、动态库的制作与使用。 阅读详情

相关推荐

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 225

为你详解Linux安装GCC方法

下载: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/gcc-4.5.1.tar.bz2 浏览: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/ 查看Changes: http://gcc.gnu.org/gcc-4.5/changes.htm 现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、F

BullJordan23的专栏 12万+

线性回归LinearRegression

对视频中线性回归算法的相关内容进行总结与记录 文章目录一、理论基础二、实例2.1 一元线性回归2.1.1 推导过程2.1.2 代码实现(基于numpy)2.1.3 代码实现(基于sklearn)2.2 多元线性回归2.2.1 代码实现(基于numpy)2.2.2 代码实现(基于sklearn) 一、理论基础 回归 通常是指利用某个函数,尽可能把数据样本点“串”在一起,用于描述输入变量和输出变量间的变化关系 线性回归 特点:用来把数据“串”起来的那个函数是线性的 (一元线性回归(一个自变量) &a.

邱邱邱的博客 1068

Ubuntu下gcc安装及使用

             Ubuntu下gcc安装及使用 2016年06月21日 10:58:37 29486人阅读 评论(2) 收藏 举报 ...

lucifa_li的博客 4万+

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 61

【教程4>第6章>第15节】 基于I+jQ复数信号的LS信道估计和均衡实现1——matlab仿真分析,QPSK为例

在基于QPSK调制的通信系统中,LS信道估计和均衡是用于补偿信道失真、提高信号传输质量的重要技术。以下将详细介绍基于I+jQ复数信号的 LS 信道估计和均衡的实现原理与过程。可以看到,通过线性插值之后,QPSK信号的星座图可以模糊的看到四个星座点(图2),通过非线性插值之后,可以清晰的看到QPSK的四个星座点(图3)。可以看到,信道均衡显著提高了通信系统的可靠性和有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 657

GCC 简介

GCC(GNU Compiler Collection)是一套由 GNU 开发的编程语言编译器,它支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 和 Go 等。GCC 是一个开源的工具集,可在多个平台上运行,支持多种操作系统和架构。它是许多操作系统的默认编译器,也是许多开源项目的首选编译工具。GCC 的编译过程可以分为四个主要阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembling)和链接(Linking)。

陈辰学长的博客 2334

ICC2:平行打孔create_pg_stapling_vias

power rail(follow pin)不总是metal1一成不变的,当需要使用metal2做power rail,而standard cell的pg pin仍然是metal1时就需要平行打孔,从metal2到metal1。 以往都是用create_pg_vias -allow_parallel_objects来做,但这样有两个弊端,一是需要抓出所有的via12(包括standard cell内部的和出pin绕线产生的),添加routing blockage,防止create pg via的时候产生d

m0_61544122的博客 2259

gcc简介

编译器根据其对程序的了解进行优化。gcc提供的代码优化功能非常强大,它通过参数-On来控制优化代码的生成,其中n为优化级别的整数,比较典型的范围是从0变化到2或3(与版本有关)。,会加深elf文件的理解,但要深刻理解这些结构化的文件,以及计算机程序的执行过程,需要了解加载器、链接器等操作系统提供的程序,这些结构化的文件可以粗糙地理解为上述程序之间的协议。2000年:GCC 3.0发布,引入了全新的C++编译器前端(g++),它提供了对C++标准的更好支持,并且是第一个能够完全支持ISO C99标准的版本。

jisan541的博客 2872

(秋招复习)一些SLAM基础

秋招复习--SLAM基础知识篇

weixin_45432823的博客 768

姿态传感器/陀螺仪之SC7A20HTR是应用驱动程序设计

define SC7A20_CTRL1_PM_100HZ (0x5 << 4) // 正常模式,100Hz输出数据速率(ODR)// 用于存储6字节的原始数据(X_L, X_H, Y_L, Y_H, Z_L, Z_H)#define SC7A20_WHO_AM_I_VALUE 0x11 // 读取WHO_AM_I寄存器应该返回的值。// 但HAL_I2C_Mem_Read按顺序读,data[0]是X_L(低8位),data[1]是X_H(高8位)MX_I2C1_Init();

corlin6688的博客 761

gcc 简介

gcc与g++,当程序中出现using namespace std等带有c++特性的语句时,如果用gcc编译时,必须显式地指明这个程序要用c++编译库编译,而g++可以直接编译。支持ansi/iso语法标准,取消gnu所有与ansi冲突的语法扩展。定义指定的宏,使它能够通过源码中的#ifdef进行检验。tc++3 编译该段代码后,大小为:7.8K。bc45编译该段代码后,大小为:53.8k。g++ 编译该段代码后,大小为:4.6K。vc6编译该段代码后,大小为:184k。

嵌入式之斋 1569

ARINC429协议分析

如下表所示,ARINC429在发送一帧过程中,首先发送以START开始,以END结束,共发送32bits数据,其中0~7bits为Lable数据,9~8bits为SDI数据,10~28bits为数据,29~30bits为SSM,31bit为校验位End30292827262524校验位SSM2322212019181716DATA15141312111098SDI7654321Start。

5223

GCC编译器——GCC编译器的简介

以下内容源于C语言中文网的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 6509

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GCC简介及命令参数总结

在自学Linux相关的知识,学习了GCC、GDB、Makefile等xian相关知识,本想将zhe'这段时间所学东西zong总结一下,奈何肚子里墨水严重不足,盯着屏幕半个小时愣是写不出东西。首先时自己确实学艺不精写不出太深的东西,其次自己写作写作水平有限,写不好什么。就将记的笔记总结一下,再在网上一些内容添加进去丰富一下。 相关博客http://blog.youkuaiyun.com/eastonwoo/a...

Xigle_sun的博客 7805

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

gcc内嵌汇编简介

gcc内嵌汇编简介在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。 1、简单的内嵌汇编 例: __asm__ __volatile__("hlt");"__asm__"表示后面的代码为内嵌汇编,"a...

小白笔记本 563

GCC工具链简介

想编译各种嵌入式裸机的,想编译Linux Kernel,又或者想编译u-boot的,或者想编译运行在KylinOS上,甚至想编译运行在Android上的C代码,该选择哪个gcc版本呢? MinGW和gcc什么关系? ARM下几种gcc有什么区别? RISC-V内核又该如何选择GCC工具链呢? gcc不同版本的头文件、动态库等兼容性如何呢? 选择了正确的gcc版本,又是如何编译安装呢? 下载arm gcc时,经常会遇到Linaro,那么Linaro与arm、gcc是什么关系呢? gdb-multiarch?

飞鹤的程序员人生 3547

【GCC】gcc编译器简介

交叉编译是一种在一种体系结构的平台上编译出能在另一种体系结构平台上运行的程序的技术。例如,在x86平台上编译ARM平台程序,编译后的程序无法在x86上运行,需在ARM平台上执行。C语言程序的编译过程包括预处理、编译、汇编和链接四个步骤,最终生成可执行文件。GCC是Linux下常用的C语言编译器,支持多种语言编译,最初为GNU项目开发。GCC提供了多种编译选项,支持动态库和静态库的制作与使用。动态库需放置在系统库目录或通过环境变量指定路径,而静态库则无需额外操作。交叉编译时,需使用特定参数如-fPIC以确保代

weixin_43192805的博客 982
上一篇: linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
下一篇: Makefile简单介绍
guoping2018
博客等级 码龄16年 6粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值