Greenhills学习总结

news/2024/10/23 5:34:07/

学习背景:近期参与xx项目过程中,遇到较多的关于代码集成编译的知识盲区,因此需要进行相关知识的学习和扫盲。

参考资料:GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHills编译器的使用方法、配置选项、编译流程以及常见问题解决方案,旨在帮助用户更好地理解和使用GreenHills编译器 - GitCode

20分钟Makefile光速入门教程_哔哩哔哩_bilibili

代码编译过程:

Direct Binary Generation Compilation (白色箭头 )

Traditional Compilation:黑色箭头;

Direct Binary Generation Compilation (白色箭头);

 编译选项配置逻辑:

  1. 读取配置选项,当配置选项相矛盾时以后面的配置为准,当无法识别配置选项时,会忽略该配置并告警;
  2. driver按照文件的顺序进行处理,若一个文件存在问题,driver将继续处理后续的文件;若driver无法识别文件扩展名,会将该文件传递给链接器处理;

ccppc hello.c 产生以下类型文件:.out 

  1. .o  目标文件。总是被编译器保留;
  2. .map 链接器生成;
  3.  .dnm 包含基础的调试信息;
  4. .dla 包含基础的调试信息;

 可识别的文件名:

 ld文件:链接器指令(.ld)文件定义了可执行文件的程序段将程序段分配给不同的存储区。

eg: ccppc hello.c mylinkfile.ld

产生其他的文件:

ccppc hello.c-S   //产生汇编语言
ccppc hello.c-c   //产生.o文件ccppc hello.c foo.o-archive-o libfoo.a  
//This command produces alibrary of object file called libfoo.a, which contains two object files, hello.o and foo.o.
//When using the-archive option to create a library, you must use the-o option to specify a name for it.

Driver Options for Intermediate Forms of Output:

可以通过一个文件来表示编译选项;会被识别的字符: 空格、制表符、换行、双引号,不能增加注释

 举例如下:

makefiles:

20分钟Makefile光速入门教程

 


http://www.ppmy.cn/news/1541242.html

相关文章

Electron+Vue实现两种方式的截屏功能

本次介绍的截屏功能一共有两种分别是在electron环境中与非electron环境中 非electron环境 这个环境下会有一些限制: 1.只能截浏览器中的画面 2.如果里面有iframe或者base64的图片会加载不出来(这个会有解决办法) yarn add -D js-web-scree…

UE5遇到问题-UE5可正常打包出来但是运行不了

遇到问题: UE5可正常打包出来但是运行不了 解决办法: 首先先在本地运行跑一下工程; 发现是没有关闭插件的问题,点开插件关闭掉相应的插件重新打包就可以了。 参考视频:(新手向)虚幻5打包 打包后双击exe没反应怎么办…

【Unity】Unity中获取网络时间进行每日和每月刷新

直接上代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class DateChecker : MonoBehaviour {private DateTime lastCheckedDate; //上次刷新日数据的日期private DateTime lastMonthUtc; //上次刷新月数据的日期T…

玫瑰花HTML源码

HTML源码 <pre id"tiresult" style"font-size: 9px; background-color: #000000; font-weight: bold; padding: 4px 5px; --fs: 9px;"><b style"color:#000000">0010000100000111101110110111100010000100000100001010111111100110…

Kafka原理剖析之「Purgatory(炼狱 | 时间轮)」

一、前言 本文介绍一下Kafka赫赫有名的组件Purgatory&#xff0c;相信做Kafka的朋友或多或少都对其有一定的了解&#xff0c;至少是听过它的名字。那它的作用是什么呢&#xff0c;用来解决什么问题呢&#xff1f;官网confluent早就有文章对其做了阐述 https://cwiki.apache.o…

django开发连接Mysql报错1045或08001问题处理方法

存在问题&#xff1a; django开发过程中&#xff0c;连接mysql数据库一直报错&#xff0c;如下&#xff1a; 或 网上搜索各种解决办法均无效&#xff08;类似加密方式、配置方式等&#xff09; 解决方案&#xff1a; 查看mysql版本&#xff0c;为8.0.26 django开发中&#x…

C#第5讲:类和对象的使用

一、声明类&#xff1a;使用class关键字&#xff0c;类的属性及方法写在{}中。 二、声明属性 属性最常用的书写方法: public int Age {get; set;} 如果属性中具有get关键字&#xff0c;说明可以获取该属性的值。 如果属性中具有set关键字&#xff0c;说明可以向该属性设置值…

PHP unset() 函数的作用

PHP 中的 unset() 函数用于销毁指定的变量。具体来说&#xff0c;它会解除变量名与其数据之间的关联&#xff0c;从而释放该变量所占用的内存。不过需要注意的是&#xff0c;unset() 并不是删除变量的内容&#xff0c;而是取消对变量名的引用。如果变量是数组中的某个元素或者对…