当前位置: 首页 > news >正文

链接1:编译器驱动程序

文章目录

  • GNU编译器
  • 示例
  • 编译

GNU编译器

GNU编译器(GNU Compiler)是由自由软件基金会(Free Software Foundation,FSF)开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码,将其转换为可执行文件或库。GNU编译器集合的其中一个最知名的成员是GCC(GNU Compiler Collection)。

GCC支持多种编程语言,包括C、C++、Fortran、Ada、Objective-C等。它在许多操作系统上都可用,包括各种类UNIX系统、Linux、Windows等。GCC的设计目标之一是提供高度的可移植性,使得开发者可以在不同的平台上使用相同的源代码进行编译。

除了GCC之外,GNU编译器集合还包括其他工具,例如GDB(GNU Debugger),用于调试程序;GFORTRAN,用于Fortran语言的编译器;以及GNAT,用于Ada语言的编译器等。

GNU编译器是自由软件,遵循自由软件基金会的通用公共许可证(GPL)等自由软件许可协议。这意味着用户可以自由地查看、修改和分发这些编译器的源代码。

大多数编译系统提供编译器驱动程序(compiler driver),它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。

示例

sum.h

#ifndef __SUM__H_
#define __SUM__H_int sum(int *a,int n);#endif

sum.c

#include "sum.h"
int sum(int *a,int n){int i,s=0;for ( i = 0; i < n; i++){s += a[i];}return s;
}

main.c

#include "sum.h"
int array[2] = {1,2};
int main(int argc, char const *argv[])
{int val = sum(array,2);return 0;
}

编译

在 shell 中输人下列命令来调用GCC 驱动程序:

linux> gcc -Og -o prog main.c sum.c

这个命令使用GCC编译器,它的目标是将两个C语言源代码文件(main.c和sum.c)编译成一个可执行文件,该文件的名称将被命名为“prog”。
解释每个部分:

  • gcc: GNU Compiler Collection的命令,用于调用GCC编译器。

  • -Og: 这是一个编译选项,表示启用优化。具体而言,这是“优化为调试”(Optimize for Debugging)的意思。它启用一些优化,但保留了对调试的支持,因此在开发时可以更轻松地进行调试。

  • -o prog: 这是一个指定输出文件名的选项。在这里,“prog”是输出可执行文件的名称。

  • main.c sum.c: 这是要编译的源代码文件的名称,用空格分隔。在这个例子中,它们是“main.c”和“sum.c”。

这个命令将执行编译操作,生成一个名为“prog”的可执行文件,其中包含来“main.c”和“sum.c”的源代码。如果编译成功,你可以通过运行./prog来执行生成的可执行文件。

下图概括了驱动程序在将示例程序从ASCII码源文件翻译成可执行目标文件时的行为。
在这里插入图片描述
如果想看看这些步骤,用-v 选项来运行 GCC。驱动程序首先运行 C预处理器(cpp),它将 C的源程序 main.c翻译成一个ASCII码的中间文件 main.i:

cpp [other arguments] main.c /tmp/main.i

接下来,驱动程序运行 C编译器(ccl),它将 main.i 翻译成一个ASCII 汇编语言文件 main.s:

cc1 /tmp/main.i -0g [other arguments] -o /tmp/main.s

然后,驱动程序运行汇编器(as),它将 main.s 翻译成一个可重定位目标文件(relo-catable object file)main.o:

as [otherarguments] -o /tmp/main.o /tmp/main.s

驱动程序经过相同的过程生成 sum.o。
最后,它运行链接器程序 ld,将 main.o和sum.o以及一些必要的系统目标文件组合起来,创建一个可执行目标文件(executable object file)prog:

ld -o prog [system object files and args] /tmp/main.o /tmp/sum.o

要运行可执行文件 prog,我们在 Linux shell 的命令行上输入它的名字

linux> ./prog

shell 调用操作系统中一个叫做加载器(loader)的函数,它将可执行文件 prog 中的代码和数据复制到内存,然后将控制转移到这个程序的开头。

相关文章:

链接1:编译器驱动程序

文章目录 GNU编译器示例编译 GNU编译器 GNU编译器&#xff08;GNU Compiler&#xff09;是由自由软件基金会&#xff08;Free Software Foundation&#xff0c;FSF&#xff09;开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码&#xff0c;将其转换为…...

经典滑动窗口试题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、水果成篮1、题目讲解2、讲解算法思路3、代码实现 二、找到字符串中所有字母异位词1、题目…...

easyexcel指定sheet页动态给行列加背景色

需求 1、easyexcel&#xff0c;有多个sheet页&#xff0c;某些sheet页的行、列动态需要加背景色。 2、扩展支持cellStyle标记单元格超过64000 import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.…...

设计模式在实际业务中应用 - 模版方法

1. 业务背景 作者在工作中主要主导 A 业务线的系统建设&#xff0c;A 业务线主要是零售场景酒水的售卖与即时配送服务。为了方便运营在自研系统中对多平台商品进行管理而开发的三方平台商品管理功能&#xff0c;本次介绍的模版方法模式则是在该功能开发过程中的落地实践。 2.…...

BGP综合实验

任务如下&#xff1a; 1.AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24该地址不能在任何协议中宣告 AS3存在两个环回&#xff0c;一个地址为192.168.2.0/24该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以互相通讯 2.整个AS2的IP地址为172.16.0.0/16&…...

Global Surface Summary of the Day 全球逐日气象站点数据 GSOD数据集

数据名称 Global Surface Summary of the Day 数据内容 数据包含以下气象要素的日值观测数据&#xff1a; 气压&#xff1a;平均气压、海平面气压&#xff1b;气温&#xff1a;平均气温、日最高气温、日最低气温&#xff1b;湿度&#xff1a;露点温度&#xff08;需自行换算…...

Harmony OS4开发入门

代码地址&#xff1a; https://gitee.com/BruceLeeAdmin/harmonyos/tree/master 项目目录介绍 ArkTS介绍 简单案例&#xff1a; State times: number 0/*数据类型&#xff1a;stringnumberany: 不确定类型&#xff0c;可以是任意类型*/State msg: string "hello"…...

.net core 事务

在 .NET Core 中&#xff0c;可以使用 Entity Framework Core 来实现事务处理。下面是一个简单的示例&#xff0c;展示了如何在 .NET Core 中使用 Entity Framework Core 来创建和执行事务&#xff1a; using System; using Microsoft.EntityFrameworkCore; using System.Tran…...

【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

MPPT工作流程及算法和硬件的选择

MPPT算法选择 目前&#xff0c;MPPT算法有开路电压比率(离线)、短路电流比率(离线)、观察调节(在线)、极限追踪控制法(在线)。 在光伏控制系统中&#xff0c;因为日照、温度等条件的变化&#xff0c;光伏电池的输出功率也是在不断变化的&#xff0c;为保证使得光伏电池的输出功…...

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…...

每日一练【移动零】

一、题目描述 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 二、题目解析 可以…...

QT修改windowTitle的名字以及图片

1.修改名字:点击ui的QMainWindow,然后找到windowTitle的选项修改即可 2.修改windowTitle的图片,依旧是找到windowIcon,选择资源,这个资源可以是你放到qrc里面的图片也可以是外置的图片 3.然后运行就可以看到效果了...

C语言-指针讲解(3)

文章目录 1.字符指针变量1.1 字符指针变量类型是什么1.2字符指针变量的两种使用方法&#xff1a;1.3字符指针笔试题讲解1.3.1 代码解剖 2.数组指针变量2.1 什么是数组指针2.2 数组指针变量是什么&#xff1f;2.2.3 数组指针变量的举例 2.3数组指针和指针数组的区别是什么&#…...

慢 SQL 分析及优化

目录 分析慢 SQL SQL 优化 单表优化 多表优化 慢 SQL&#xff1a;指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法&#xff1a;通过慢查询日志来查找慢 SQL MySQL 的慢查询日志是 MySQL 提供的一种日志记录&#xff0c;它用来记录在 MySQL 中响应时间超过阈值的语句&…...

PTA:计算m到n之间所有素数的和

题目 计算m到n之间所有素数的和&#xff0c;其中 2 < m <n <100 输入格式: 请在这里写输入格式。例如&#xff1a;输入两个正整数 输出格式: 请在这里描述输出格式。例如&#xff1a;输出两个正整数之间的素数和。 样例 输入样例: 在这里给出一组输入。例如&…...

Golang实现YOLO:高性能目标检测算法

引言 目标检测是计算机视觉领域的重要任务&#xff0c;它不仅可以识别图像中的物体&#xff0c;还可以标记出物体的位置和边界框。YOLO&#xff08;You Only Look Once&#xff09;是一种先进的目标检测算法&#xff0c;以其高精度和实时性而闻名。本文将介绍如何使用Golang实…...

文档 + 模型

文档 模型 0: 基于MATLAB的soc锂电池系统设计 1: 电力系统继电保护仿真设计-毕业论文 2: 继电保护仿真-三段式电流保护的方案设计及分析-相间短路 3: 直流电机双闭环控制系统 转速电流双闭环调速 4: matlab电力系统继电保护仿真 三段电流保护仿真-双侧电源系统 5: OFDM-MIMO课…...

计算机毕业设计php+bootstrap小区物业管理系统

意义&#xff1a;随着我国经济的发展和人们生活水平的提高&#xff0c;住宅小区已经成为人们居住的主流&#xff0c;人们生活质量提高的同时&#xff0c;对小区物业管理的要求也越来越高&#xff0c;诸如对小区的维修维护&#xff0c;甚至对各项投诉都要求小区管理者做得好&…...

Osg线程模型(选择不当,会引发崩溃)

来自《最长的一帧》...

Android + OpenCV 实战指南:从环境搭建到图像处理(超详细)

1. Android与OpenCV环境搭建全攻略 第一次接触OpenCV的Android开发者往往会卡在环境配置这一步。我当年踩过的坑现在可以帮你完美避开。OpenCV作为计算机视觉领域的瑞士军刀&#xff0c;在移动端同样能发挥强大威力&#xff0c;但首先得让它跑起来。 核心工具准备&#xff1a; …...

MAXIM美信 MAX1673ESA+T SOP8 电荷泵

特性MAX1673电荷泵反相器提供了一种低成本、紧凑的方式&#xff0c;可从正输入产生稳压负输出&#xff0c;输出电流高达125mA。仅需三个小电容&#xff0c;且只需两个电阻即可设置其输出电压。输入范围为2V至5.5V。在跳周期&#xff08;Skip&#xff09;稳压模式下&#xff0c;…...

云原生网络架构与实践:构建高效的网络系统

云原生网络架构与实践&#xff1a;构建高效的网络系统 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农&#xff0c;我深知云原生网络在现代企业中的重要性。随着云技术的快速发展&#xff0c;传统的网络架构已经难以满足云原生环境的需求。今天&#xff0c;我就来聊聊云原生…...

使用Spring AI Alibaba构建智能体Agent蝗

背景 在软件开发的漫长旅途中&#xff0c;"构建"这个词往往让人又爱又恨。爱的是&#xff0c;一键点击&#xff0c;代码变成产品&#xff0c;那是程序员最迷人的时刻&#xff1b;恨的是&#xff0c;维护那一堆乱糟糟的构建脚本&#xff0c;简直是噩梦。 在很多项目中…...

边缘计算未来展望

边缘计算未来展望&#xff1a;重塑数字世界的智能边界 在万物互联的时代&#xff0c;数据洪流正以前所未有的速度增长。传统云计算的中心化处理模式已难以满足实时性、低延迟和隐私保护的需求&#xff0c;边缘计算应运而生&#xff0c;成为技术演进的关键方向。通过将计算能力…...

前端工程化构建工具深度对比指南

前端工程化构建工具深度对比指南 在现代前端开发中&#xff0c;工程化构建工具已成为提升开发效率、优化代码质量的关键。从早期的Grunt、Gulp到如今的Webpack、Vite、Rollup等&#xff0c;工具的选择直接影响项目的构建速度和最终产物的性能。本文将从多个维度对主流构建工具…...

Qwen3.5-4B-Claude-Opus应用场景:软件测试工程师用例设计辅助

Qwen3.5-4B-Claude-Opus应用场景&#xff1a;软件测试工程师用例设计辅助 1. 引言&#xff1a;测试工程师的痛点与AI解决方案 作为一名软件测试工程师&#xff0c;你是否经常面临这样的挑战&#xff1a; 面对复杂系统时&#xff0c;难以全面覆盖所有测试场景编写测试用例耗时…...

墨韵技术|CMake:现代项目构建的「行云流水」之道

&#x1f30a; 墨韵技术&#xff5c;CMake&#xff1a;现代项目构建的「行云流水」之道Bilibili 同步视频&#x1f3af; 为何选择 CMake&#xff1f;—— 稳如磐石&#xff0c;兼容万象&#x1f50d; CMake 核心特性 笔笔点睛1️⃣ 自动搜索库与头文件 智能无感2️⃣ 独立构建…...

漏洞扫描器:常见漏洞模式的自动化检测

漏洞扫描器&#xff1a;常见漏洞模式的自动化检测 在当今数字化时代&#xff0c;网络安全问题日益突出&#xff0c;企业和个人面临着来自黑客、恶意软件等各类威胁。漏洞扫描器作为一种自动化工具&#xff0c;能够高效检测系统中存在的常见漏洞模式&#xff0c;帮助用户提前发…...

保姆级教程:用Docker一键部署YOLOv10 TensorRT模型到Jetson Orin Nano(支持USB摄像头)

极速部署YOLOv10 TensorRT模型到Jetson Orin Nano的完整实践指南 在边缘计算设备上实现高效的目标检测一直是AI开发者关注的焦点。Jetson Orin Nano作为NVIDIA推出的高性能边缘计算平台&#xff0c;配合YOLOv10这一最新目标检测模型&#xff0c;能够为各类实时视觉应用提供强大…...