【Keil5 MDK】armar工具的基本用法(armar --help)

本文介绍了ARMLibrarian 5.03版本的使用方法,包括命令格式、选项参数及示例。ARMLibrarian是一款用于档案创建与维护的工具,支持文件插入、删除、提取等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM Librarian, 5.03 [Build 76]
- archive creation and maintenance tool

Command format:

armar options archive [ file_list ]

Wildcards '?' and '*' may be used in file_list

Options:-

-r Insert files in <file_list>, replace existing members of the same name.
-d Delete the members in <file_list>.
-x Extract members in <file_list> placing in files of the same name.
-m Move files in <file_list>.
-p Print files to stdout.
-a pos Insert/move files after file named <pos>.
-b pos Insert/move files before file named <pos>.
-u Update older files only, used with -r.

-n Do not add a symbol table to an object archive.
-s Force regeneration of archive symbol table.
-t Print table of contents of archive.
--zs Show the symbol table.
--zt Summarize the archive contents (sizes + entries).
-c Suppress warning when a new archive is created.
-C Do not overwrite existing files when extracting.
-T Truncate file names to system maximum length.
-v Give verbose output.
--create Force creation of a new archive.
--via file Take additional arguments from via file.
--sizes List the size of each member and the library total.
--entries List sections containing ENTRY points.
--vsn Print the current Armar Version.
--help Print this message.

Examples:-

armar -r mylib.a obj1 obj2 obj3...
armar -x mylib.a ?sort*
armar -d mylib.a hash.o
armar -tv ansilib.a

 

转载于:https://www.cnblogs.com/utank/p/8384812.html

<think>我们正在讨论ARM工具链中的armar工具。根据引用[1],Arm Compiler 6中的组件包括armar。用户询问armar编译器的具体功能和作用,但请注意,armar实际上是一个库管理器,而不是编译器。因此,我们需要澄清这一点并详细解释armar的功能和应用。 根据引用[1]和引用[2]: - Arm Compiler 6包含armar,它是ARM架构下的库管理工具- armar用于创建、修改和提取静态库(通常以.a为扩展名)。 具体功能: 1. **创建静态库**:将多个目标文件(.o)打包成一个静态库文件(.a),便于代码重用和项目管理。 2. **修改库**:可以向现有库中添加新的目标文件、替换库中已有的目标文件或删除库中的目标文件。 3. **提取库中的文件**:可以从静态库中提取一个或多个目标文件,用于调试或重新编译。 4. **列出库内容**:可以查看静态库中包含哪些目标文件。 在ARM架构开发中的应用场景: - 当开发一个大型项目时,可以将常用的函数(如数学运算、驱动函数等)编译成目标文件,然后用armar打包成静态库。这样在链接时,只需要链接这个库即可,而不需要重新编译这些函数。 - 在团队协作中,可以将不同模块分别编译并打包成库,然后由主程序链接这些库,实现模块化开发。 示例命令: 1. 创建一个新的静态库,并将目标文件添加进去: ```bash armar -r libmath.a add.o sub.o mul.o ``` 其中,`-r`选项表示替换或添加文件到库中。如果库不存在,则创建新的库。 2. 向现有库中添加新的目标文件: ```bash armar -r libmath.a div.o ``` 3. 从库中删除一个目标文件: ```bash armar -d libmath.a sub.o ``` 4. 列出库中的内容: ```bash armar -t libmath.a ``` 5. 从库中提取一个目标文件(例如,提取add.o): ```bash armar -x libmath.a add.o ``` 注意:armar与Unix/Linux系统中的ar工具类似,但它是针对ARM架构目标文件优化的。 引用说明: - 引用[1]指出Arm Compiler 6包含armar,因此我们确认armarARM官方工具链的一部分[^1]。 - 引用[2]提到ARM维护了一套基于GCC的交叉编译工具链,但armarARM专用工具链中的工具[^2]。 总结:armarARM工具链中的库管理工具,用于处理静态库,它在ARM嵌入式开发中扮演着代码组织和模块化管理的重要角色。 --- ### 相关问题 1. 如何在Keil MDK中使用armar创建和管理静态库? 2. 静态库和动态库在ARM嵌入式开发中有何区别?为什么通常使用静态库? 3. 如何解决使用armar打包静态库时出现的符号冲突问题? 4. 如何将第三方静态库(.a文件)集成到ARM项目中? 5. 在ARM开发中,如何查看静态库中的符号表?</think>### ARM工具链中`armar`工具详解 `armar`是ARM编译器工具链中的**静态库管理器**(非编译器),用于创建、修改和提取静态库(`.a`文件)。它在ARM架构开发中扮演代码复用和模块化管理的核心角色。以下结合具体功能和应用场景详细说明: --- ### 一、核心功能与作用 #### 1. **创建静态库** **作用**:将多个目标文件(`.o`)打包为单一静态库文件(`.a`),便于代码复用。 **示例**: ```bash # 将add.o/sub.o/mul.o打包为libmath.a armar -rcs libmath.a add.o sub.o mul.o ``` - `-r`:替换或添加文件 - `-c`:静默创建(不提示) - `-s`:生成符号索引(加速链接)[^1] #### 2. **修改库内容** **作用**:动态增删库中的目标文件。 **示例**: ```bash # 向libmath.a添加新文件div.o armar -r libmath.a div.o # 从库中删除sub.o armar -d libmath.a sub.o ``` #### 3. **提取库文件** **作用**:解压库中特定目标文件,用于调试或重构。 **示例**: ```bash # 提取libmath.a中的add.o armar -x libmath.a add.o ``` #### 4. **查看库内容** **作用**:列出静态库包含的所有目标文件和符号。 **示例**: ```bash # 显示libmath.a的目录结构 armar -t libmath.a # 输出:add.o sub.o mul.o div.o ``` --- ### 二、在ARM开发中的典型应用 #### ▶ **场景1:驱动模块封装** 将不同外设驱动(GPIO/UART/I2C)编译为目标文件,打包为`libdrivers.a`: ```bash armar -rcs libdrivers.a gpio.o uart.o i2c.o ``` 主程序链接时只需指定该库: ```bash armlink ... main.o --userlib=libdrivers.a ``` #### ▶ **场景2:算法库版本管理** 当算法优化后,替换库中旧目标文件: ```bash # 用优化后的fft_v2.o替换原fft.o armar -r libdsp.a fft_v2.o # 同名文件自动替换 ``` #### ▶ **场景3:解决符号冲突** 检查多个库中的符号定义是否重复: ```bash # 查看libA.a和libB.a的全局符号 fromelf --symbols libA.a > symbols.txt fromelf --symbols libB.a >> symbols.txt # 搜索重复符号名(如UART_Init) ``` --- ### 三、关键机制解析 1. **符号索引(Symbol Index)** - 通过`-s`参数生成,记录所有全局符号(函数/变量)的地址 - **加速链接**:链接器直接查询索引表,无需扫描整个库[^1] - 查看索引:`armar -s --print-armap libmath.a` 2. **与链接器的协作** - 链接时`armlink`仅提取**被引用**的符号对应的目标文件 - 示例:若程序只调用`add()`,则`libmath.a`中仅`add.o`被链接进最终固件[^3] 3. **静态库 vs 动态库** | 特性 | 静态库(.a) | 动态库(.so) | |--------------|------------------|------------------| | **链接时机** | 编译时链接 | 运行时加载 | | **内存占用** | 固件体积增大 | 多进程共享 | | **ARM应用** | 嵌入式主流方案 | Linux系统常见 | --- ### 四、工程实践技巧 1. **减少固件体积**: ```bash # 删除库中未使用的符号 armar --strip-unneeded libmath.a ``` 2. **兼容性处理**: 混合ARM/Thumb代码时,确保库中目标文件的指令集一致(通过`armcc -mthumb`编译)[^3]。 3. **调试支持**: 保留调试信息(`armcc -g`编译),库文件仍可用`fromelf`反汇编: ```bash fromelf -c libmath.a > disassembly.txt ``` --- ### 总结 `armar`的核心价值在于: 1. **模块化开发**:将通用功能封装为库,提升代码复用率 2. **版本控制**:灵活管理算法/驱动的迭代更新 3. **链接优化**:通过符号索引减少编译时间 在资源受限的嵌入式系统中(如Cortex-M系列),静态库是平衡代码复用与ROM占用的最优解。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值