当前位置: 首页 > 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.gsyq.cn/news/1432299.html

相关文章:

  • 动态现金对冲策略:算法驱动的风险管理与资产配置实践
  • 从电赛作品到产品思维:聊聊单相逆变器并联系统中的那些‘坑’与优化思路
  • VASP计算完别急着关!手把手教你从OUTCAR、CONTCAR里‘挖’出有用数据(附常用grep命令)
  • 别再只改UserAgent了!UniApp App端plus.navigator对象的10个隐藏玩法(状态栏、Cookie、UA全解析)
  • 五月的尾巴~未来可期
  • 告别树莓派!用CH341A串口工具在Windows上轻松调试I2C设备(附TPA6130A2实测)
  • FPGA玩转串口通信:深入Xilinx AXI UART 16550 IP核的FIFO与中断机制,避开数据丢失的那些坑
  • 投票链接怎么制作,小程序的操作指南 - 投票小程序
  • K8s网络管理利器:Calicoctl从安装到实战,教你排查节点就绪与网络策略问题
  • 别被NAND骗了!CM211-1 MC022盒子刷Armbian保姆级教程(S905L3+EMMC实战)
  • 避坑指南:VASP做CI-NEB计算时,你的INCAR参数可能都设错了
  • 保姆级教程:用Operator模式在K8s集群里部署Calico网络插件(附VXLAN配置避坑)
  • 大语言模型行为根源:从语义理解到结构触发的范式转变
  • 如何永久保存B站视频:解密m4s-converter的跨平台转换方案
  • 从零到部署:在Linux服务器上为你的.NET 8.0应用配置生产环境
  • 告别Arduino IDE!用VSCode+PlatformIO给ESP32点灯,保姆级避坑指南
  • 用STM32CubeMX和HAL库5分钟搞定HC-SR04超声波测距(附避坑指南)
  • WizTree vs. 传统工具:实测它如何秒杀TreeSize,成为磁盘分析新王者
  • 别再只用IForest了!用Python手把手教你实现LOF算法,搞定信用卡欺诈检测
  • 程序员如何通过自动化与系统思维实现高效工作
  • 用Flask+Python搞定m3u8视频下载与Cloudflare R2上传,保姆级配置避坑指南
  • 别再手动画封装了!用AD的IPC向导5分钟搞定SOP-8封装(附详细参数填写避坑指南)
  • 华为交换机配置备份与恢复的‘安全’与‘省事’之道:FTP、TFTP还是SFTP?一次讲清
  • 从硬件安装到代码映射:深入拆解Betaflight与PX4飞控IMU方向设定的底层逻辑
  • 2026年4月评价高的船用疏水阀品牌推荐,船用疏水阀/船用阀门附件/船用舷侧阀/船用空气管头,船用疏水阀厂家哪个好 - 品牌推荐师
  • 不只是算能量:用Gaussian预测NMR、IR光谱,给你的分子做个“全面体检”
  • AR光学设计实战:如何将Lumerical优化的光栅模型导入Ansys Speos进行系统仿真?
  • 别再乱删系统文件了!深度解析FNPLicensingService.exe:它是Adobe/PS/CAD的‘许可证管家’
  • Grafana告警实战:从飞书机器人到MySQL业务监控,我的完整配置踩坑记录
  • 别再对着Halcon界面发懵了!HDevelop新手必看的窗口布局与快速上手指南