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

ARM Compiler 6.00 update 1版本解析与使用指南

1. ARM Compiler 6.00 update 1 (build 21) 版本概述

ARM Compiler 6.00 update 1 (build 21) 是ARM公司于2014年5月29日发布的一个更新版本。这个版本主要针对ARMv8架构提供了编译支持,能够为AArch32和AArch64的裸机应用构建可执行二进制文件。需要注意的是,这已经是一个过时的版本(legacy release),不再建议用于新的开发项目。

重要提示:这个版本没有通过安全相关开发的认证。如果你的项目有长期维护或功能安全要求,建议使用Arm Compiler for Embedded FuSa而不是这个版本。

2. 支持架构与处理器

2.1 支持级别说明

ARM Compiler 6.00 update 1对不同的ARM架构和处理器提供了不同级别的支持:

架构/处理器支持级别建议
ARMv8-A, Cortex-A53, Cortex-A57完全支持(Production quality)可直接使用
ARMv7-A及衍生处理器Alpha级别(不完整实现)暂时使用ARM Compiler 5
ARMv7-R, ARMv7-M, ARMv6-M及衍生处理器不支持使用ARM Compiler 5
ARMv6-M之前的架构不支持使用ARM Compiler 5
非ARM架构不支持不适用

2.2 支持级别定义

  • 完全支持(Supported):生产质量,最高支持优先级
  • Beta:实现完整但未充分测试,欢迎用户反馈
  • Alpha:实现不完整且未充分测试,欢迎用户反馈
  • 不支持(Unsupported):功能不存在或已弃用,完全未经测试

3. 新特性与变化

3.1 编译器更新

armclang作为armcc的继任者,基于LLVM技术构建。它最初支持ARMv8架构,并计划在未来版本中扩展支持其他ARM架构。从旧版本迁移时,请参考产品文档中的"Migration and Compatibility Guide (DUI0742A)"。

3.2 工具链组件

armlink、armasm、fromelf和armar等工具已扩展支持ARMv8,行为与之前版本的ARM Compiler类似,但可能不是完全功能完备。

关于汇编器的注意事项:ARM Compiler 6默认采用LLVM集成汇编器,因为它更接近GNU汇编器语法,提高了GNU和ARM Compiler工具链之间的可移植性。

3.3 嵌入式C/C++库

标准ARM Compiler嵌入式库已扩展支持ARMv8,行为与之前版本类似,但可能不是完全功能完备。

4. 安装指南

4.1 系统要求

ARM Compiler 6.00支持以下主机平台:

  • Linux:

    • Red Hat Enterprise Linux 5 64-bit
    • Red Hat Enterprise Linux 6 64-bit
    • Ubuntu Desktop Edition 12.04 LTS 64-bit
  • Windows:

    • Windows 7 64-bit
    • Windows 8 64-bit
    • Windows 2012 Server 64-bit

4.2 Linux安装步骤

  1. 运行install_x86_64.sh(不要使用source命令)
  2. 按照屏幕提示操作
  3. 建议删除之前版本的ARM Compiler 6
  4. 或者安装到不同目录

依赖项

  • armclang二进制文件动态链接到libstdc++
  • 需要安装32位兼容库:
    • Red Hat:yum install glibc.i686
    • Ubuntu:apt‑get install ia32‑libs

4.3 Windows安装步骤

  1. 运行setup.exe
  2. 按照屏幕提示操作
  3. 如果已安装旧版本,会执行升级

4.4 安装后配置

ARM Compiler 6.00是许可证管理产品。需要设置ARMLMD_LICENSE_FILE环境变量指向许可证文件。

Windows注意:路径不能包含双引号,即使路径中有空格也不需要引号。

5. 使用示例

5.1 编译简单程序

为裸机AArch64系统编译一个简单程序:

echo "int main() {}" > simple.c armclang simple.c -o simple

armclang接受与Clang编译器相同的选项。更多信息请参考Clang用户手册。

6. 文档资源

ARM Compiler 6.00提供以下文档:

  1. Getting Started Guide (DUI0741A)
  2. Migration and Compatibility Guide (DUI0742A)
  3. Software Development Guide (DUI0773A)
  4. armclang Reference Guide (DUI0774A)
  5. armasm User Guide (DUI0801A)
  6. armlink User Guide (DUI0803A)
  7. ARM C and C++ Libraries and Floating-Point Support User Guide (DUI0808A)
  8. armar User Guide (DUI0806A)
  9. fromelf User Guide (DUI0805A)
  10. armasm Reference Guide (DUI0802A)
  11. armlink Reference Guide (DUI0804A)
  12. ARM C and C++ Libraries and Floating-Point Support Reference Guide (DUI0809A)
  13. Errors and Warnings Reference Guide (DUI0807A)

更多信息请访问ARM信息中心。

7. 已知问题与限制

7.1 通用问题

  • 工具链尚未进行性能调优
  • 不支持大端数据 [SDWYV-540]

7.2 C++相关问题

  • 不支持C++异常,必须使用-fno-exceptions选项编译 [SDWYV-848]

7.3 调试与DWARF支持

  • fromelf不支持包含DWARF4调试数据的映像 [SDWYV-1151, SDWYV-902, SDWYV-903]
  • 使用-g选项汇编时,只为.text段生成调试信息 [LLVM-1244]

7.4 链接问题

  • 链接器警告L6412W频繁出现 [SDWYV-930]
  • 必须使用--force_scanlib选项链接ARM库 [SDWYV-597]
  • 不支持AArch64的ELF R_MOVW_PREL组重定位287-293 [SDCOMP-23520]
  • Cortex-A53/A57对象文件链接问题 [SDWYV-1479]

7.5 过程调用标准ABI问题

  • 某些浮点聚合参数处理不符合标准 [SDWYV-1962]
  • 8字节对齐参数问题 [SDWYV-1964]
  • AArch64不支持long double [SDWYV-678]
  • 内联函数调用问题 [SDWYV-729]

7.6 ARMv7-A Alpha支持问题

  • Cortex-A5对象文件链接问题 [SDWYV-1468]
  • Cortex-A7对象文件链接问题 [SDWYV-1487]
  • 不支持--cpu=cortex-a12目标选择 [SDWYV-1467]

8. 反馈与支持

欢迎通过ARM开发者网站提交bug报告和改进建议。报告问题时请提供:

  • 工具版本和构建号
  • 重现问题所需的源代码、文件和相关命令行
  • 详细的错误描述

9. 版本更新内容

自6.00版本以来修复的问题:

  • 修复了C++程序构建失败问题(SDWYV-2279)

10. 实际使用建议

基于这个版本的特点和限制,我有以下使用建议:

  1. 新项目选择:除非有特殊原因,否则不建议使用这个过时版本。考虑使用更新的ARM Compiler版本。

  2. ARMv8开发:如果必须使用这个版本进行ARMv8开发,建议:

    • 仔细测试所有关键功能
    • 记录所有遇到的限制和问题
    • 制定升级到新版本的计划
  3. 调试技巧

    • 对于调试问题,可以尝试减少优化级别
    • 复杂的调试场景可能需要结合DS-5工具链
  4. 性能考量

    • 这个版本未进行性能调优,关键性能路径需要特别测试
    • 考虑手动优化关键代码段
  5. 迁移准备

    • 如果从旧版本迁移,预留充足时间进行兼容性测试
    • 建立完整的回归测试套件

这个版本虽然提供了ARMv8支持,但由于其过时状态和诸多限制,建议仅用于特定场景或短期项目。长期项目应考虑使用ARM官方推荐的最新稳定版本。

http://www.jsqmd.com/news/920978/

相关文章:

  • 动态现金对冲策略:算法驱动的风险管理与资产配置实践
  • 别再傻傻分不清了!一文搞懂Unity编辑器扩展的四种绘制方式(EditorWindow/Editor/PropertyDrawer)
  • 从FAST天眼到游戏建模:圆柱面方程在三维空间中的‘降维’实战技巧
  • 告别硬编码!用ABAP函数VRM_SET_VALUES动态生成下拉列表(附完整代码)
  • ChatGPT辅助Python爬虫开发:从静态抓取到反爬策略实战
  • ROS2多机调试避坑指南:从虚拟机Ping通到节点真正通讯,我踩过的那些‘坑’
  • 人生感悟 --- 如何让一个人甘心服从你的领导
  • 从电赛作品到产品思维:聊聊单相逆变器并联系统中的那些‘坑’与优化思路
  • MTKClient救砖指南:3个关键场景下的联发科设备修复方案
  • 数据科学一日入门:从零到完整项目实战指南
  • 新手避坑指南:用Quartus Prime 21.1在FPGA上实现3-8译码器(附完整Verilog代码与仿真)
  • VASP计算完别急着关!手把手教你从OUTCAR、CONTCAR里‘挖’出有用数据(附常用grep命令)
  • 避坑指南:ZYNQ Ultrascale+ DDR4配置那些容易算错的参数(以2片MT40A512M16为例)
  • 别再只改UserAgent了!UniApp App端plus.navigator对象的10个隐藏玩法(状态栏、Cookie、UA全解析)
  • 五月的尾巴~未来可期
  • ARM Cortex处理器ACP访问异常诊断与优化
  • 电缆悬挂艺术装置的运动控制与振动抑制技术
  • 树莓派新手必看:搞定第三方屏幕驱动,从插卡到点亮全流程(附离线安装方案)
  • ChatGPT 4.0如何理解笑话:NLP在幽默语义理解与上下文推理的突破
  • 别再问SW卡不卡了!2024年SolidWorks配置清单(含CPU/显卡避坑指南)
  • 手机号码定位查询系统:基于ASP.NET与Google Maps的归属地查询技术方案
  • ESP32连接DHT11传感器,数据上传到MQTT服务器的5个常见坑及解决方法
  • 别再死记硬背了!用Python实战5个经典问题,彻底搞懂贪心算法(附避坑指南)
  • 告别ESXi安装报错!手把手教你用ESXi-Customizer给镜像注入网卡驱动(附Win10/11兼容性修复)
  • 手把手教你用LVM给Ubuntu虚拟机根目录扩容,解决开机卡住和GDM启动失败
  • 告别树莓派!用CH341A串口工具在Windows上轻松调试I2C设备(附TPA6130A2实测)
  • 计算SRAM架构优化与GSI APU性能提升实践
  • 从“黑盒子”到清晰电路:手把手教你用戴维南定理(Thevenin‘s Theorem)分析运放反馈网络
  • LLM如何革新硬核工程问题求解:从仿真建模到协同决策
  • Play Integrity API Checker:你的Android设备安全检测工具终极指南