使用Greenhills生成Lib并使用Lib的两种方法

前言

在软件交付过程,如果不交付源代码,可以将源码编译之后生成lib文件提供给客户。本文介绍GHS中生成lib的两种方法,一种基于GHS工程,一种基于make文件。生成完lib后的使用,也有两种方案。本文以arm环境为例介绍,其他mcu也可参考。

GHS工程生成lib

GHS工程基于.gpj文件,该文件可以文本方式访问。

#!gbuild
defineConfig ("Debug" "DBG" "tgt\debug.gpc")
defineConfig ("Release" "REL" "tgt\release.gpc")
primaryTarget=arm_standalone.tgt
#component top_level_project
[Project]
	-bsp generic
	-cpu=cortexm7
	-align8
	:sourceDir=.

sub\Test_lib.gpj		[Library]

将工程中的gpj文件中包含的编译的gpj文件(例如Test_lib.gpj)从Program改为Library

将编译文件的gpj文件改为Library,如下所示

#!gbuild
#component hello_world_c
[Library]
	-object_dir=${%option_value(-object_dir)}/
	{optgroup=GhsCommonOptions} -o libTest.a

	-nostartfiles
    
    -I ..头文件目录
	...

配置生成的文件为libTest.a,配置好后gbuild编译即可,生成的文件除了.a文件,还会生成一个.dba文件
在这里插入图片描述

make方式生成lib

makefile方式即直接调用ccarm实现lib的生成。首先需要将源代码编译成对应的.o文件,本文不介绍这个过程。

$(BIN_DIR)/lib$(TARGET_C0).a: $(OBJS) 
	@echo -------- Generate: $@ 
	$(LD)     $(OBJS)   -archive -o "$@"  

这个makefile函数定义了一个目标文件$(BIN_DIR)/lib$(TARGET).a的生成规则。

首先,它依赖于$(OBJS),即所有的目标对象文件。

然后,它使用了$(LD)命令来链接这些目标对象文件,生成静态库文件$(BIN_DIR)/lib$(TARGET).a。

在链接过程中,使用生成obj文件作为输入。

最后,通过-archive选项指定生成静态库文件,-o选项指定输出文件名为$(BIN_DIR)/lib$(TARGET).a。

此处LD定义为ccarm.exe的路径。需要注意的是在生成的.a文件的前面加上了lib,这个在使用lib时非常关键(如果基于工程的使用不受影响,即使没有lib前缀也可识别)

生成的lib如下所示:
在这里插入图片描述
除了.a文件,还会生成一个.dba文件

lib的使用

对于生成的lib来说,有两种使用方式。

第一种是将lib作为编译的文件直接包含在gpj

#!gbuild
#component hello_world_c
[Program]
	-object_dir=${%option_value(-object_dir)}/
	{optgroup=GhsCommonOptions} -o prj_lib.elf

	-nostartfiles
    
    -I ..头文件目录
	...
..\..\Build\bin\libTest.a    

ASW.gpj

使用该种方式,lib的名称不强制要求以lib开头,但是需要基于GHS工程实现

另外一种方式是使用编译选项,这种方式既可以基于GHS工程,也可以基于Makefile实现。

#!gbuild
#component hello_world_c
[Program]
	-object_dir=${%option_value(-object_dir)}/
	{optgroup=GhsCommonOptions} -o prj_lib.elf

	-nostartfiles
    
    -I ..头文件目录
	...
	
    -L..\..\Build\bin
	-lTest

ASW.gpj

该方式使用-L指定lib路径,使用-l指定lib名称,此处需要注意使用的lib名称必须要以lib开头,且在使用**-l命令时不要带lib前缀**,也不带.a的文件扩展

使用命令行也是同理,此处不再演示。

两种使用方式对于同一个lib来说,生成的map文件和s19文件没有差异

总结

生成lib的过程本质上就是将.o文件打包,其实可以通过ax命令解压出lib中的文件,可以看到lib中的.o文件。将.o文件反汇编可以得到汇编代码,但是相比于c语言来说,如果要真的反推的还是非常困难的。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Greenhills是一种集成性的开发环境,主要用于开发实时操作系统和嵌入式软件应用。Greenhills使用手册是一个具有详细指导和介绍性质的文档,它主要介绍Greenhills的安装、配置、开发环境、工具、指令等方面的知识点,并在实际使用中提供了一些技巧和方法。 在使用Greenhills之前,需要先安装并配置好系统环境。安装过程中需要注意磁盘空间和操作系统的版本等问题。配置的过程中需要设置系统环境变量、工具链等,并选择合适的调试工具,以确保开发的程序可以正常运行。 在Greenhills开发环境中,用户可以选择使用各种语言进行开发,如C语言、汇编语言等,并使用各种开发工具进行调试和测试,包括调试器、分析工具、性能分析器等等。用户还可以使用Greenhills拥有的一些特殊工具,如覆盖率工具、测试工具、更新程序工具等等,以更好地开发和管理自己的软件应用。 在使用Greenhills过程中,用户需要熟悉一些基本的指令和操作方法,如编译、链接、构建等,同时要注意一些调试技巧和方法,如断点调试、跟踪调试等等。 使用Greenhills开发嵌入式系统和软件应用需要具备一定的技能和经验,同时也需要不断掌握新的知识和技术,以保持自己在这个领域的优势。通过学习使用Greenhills使用手册可以让用户更好地了解这个开发环境,熟练掌握其各种功能和工具,从而在实际工作中更好地应用其所学。 ### 回答2: Greenhills使用手册是一个帮助用户更好地理解和使用Greenhills编译器的文档。这个手册包括了Greenhills编译器的基础知识、语法规则以及编译器的特性和优势。对于那些刚开始使用Greenhills编译器的开发人员来说,这本手册是一个非常有用的资源。在Greenhills使用手册中,用户会了解到如何使用Greenhills编译器来提高软件的质量和性能,以及如何调试和优化代码。此外,这本手册也包含了许多实用的技巧和技术,如如何使用开发工具、如何使用代码分析工具等等。总的来说,Greenhills使用手册是一个必备的文档,可以帮助用户更好地理解和使用Greenhills编译器,提高软件开发的效率和质量。 ### 回答3: Greenhills是一款强大的软件开发工具集合,可用于嵌入式系统开发。本使用手册将介绍Greenhills的主要功能和使用方法,帮助开发者更好地利用其优势。 首先,本手册将详细介绍Greenhills的基本工具,包括编译器、调试器、分析器等工具。开发者可以了解每个工具的作用和使用方法,如何在不同的开发环境中调用和配置工具。 其次,本手册将介绍Greenhills的一些高级功能,如代码优化、代码大小控制、性能分析、安全加固等。这些功能可以帮助开发者更好地管理和优化系统的代码,提高软件的质量和性能。 同时,本手册还将介绍Greenhills与其他开发工具的集成方法,如Eclipse、Visual Studio等。这些方法可以帮助开发者在不同的开发环境中灵活使用Greenhills,提高开发效率和质量。 最后,本手册还将提供一些常见问题的解决方案和技巧,帮助开发者快速解决问题和充分利用Greenhills的功能。 通过本手册的学习,开发者将能够更好地掌握Greenhills使用方法和高级功能,提高软件开发的质量和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值