arm跨平台交叉编译tool:arm-linux-gcc之参数理解

本文详细介绍了GCC编译器的工作过程,包括预处理、编译、汇编和链接四个阶段,并通过实例展示了如何使用arm-linux-gcc在x86 Linux平台上编译ARM平台的代码。还列举了各种编译选项,如-o、-c、-S、-E、-v、-g、-Wall、-Ox、-I、-L等,以及它们的功能和用途,帮助开发者更好地理解和控制编译过程。

arm-linux-gcc 是gcc编译器 ,在x86 linux平台上编译出运行在ARM平台上的代码 。

首先介绍下GCC编译器的工作过程,编译过程分为四个阶段:

  1. 预处理(Pre-Processing)
  2. 编译(Compiling)
  3. 汇编(Assembling)
  4. 链接(Linking)

  Linux程序员可以根据自己的需要让 GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为 今后的调试做好准备。和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。

以文件example.c为例说明它的用法

arm-linux-gcc -o example example.c
  不加-c、-S、-E参数,编译器将执行预处理、编译、汇编、连接操作直接生成可执行代码。
-o参数用于指定输出的文件,输出文件名为example,如果不指定输出文件,则默认输出a.out

arm-linux-gcc -c -o example.o example.c
   -c参数将对源程序example.c进行预处理、编译、汇编操作,生成example.o文件
去掉指定输出选项"-o example.o"自动输出为example.o,所以说在这里-o加不加都可以

arm-linux-gcc -S -o example.s example.c
  -S参数将对源程序example.c进行预处理、编译,生成example.s文件
-o选项同上

arm-linux-gcc -E -o example.i example.c
   -E参数将对源程序example.c进行预处理,生成example.i文件(不同版本不一样,有的将预处理后的内容打印到屏

在高通平台上进行交叉编译时,若遇到 `configure: WARNING: using cross tools not prefixed with host triplet` 以及 `checking if mt is a manifest tool... no` 等提示,通常表明当前使用的工具链未按照标准目标三元组命名,或某些构建工具(如 `mt`)未被识别。 ### 交叉编译工具链未使用目标三元组前缀 交叉编译工具链的可执行文件应以目标平台三元组为前缀,例如 `arm-oe-linux-gnueabi-gcc`。若直接使用 `gcc` 而未指定前缀,`configure` 脚本会检测到该工具并非为交叉编译准备的,从而触发警告。为避免该问题,应在调用 `configure` 时显式指定带前缀的交叉编译工具链。例如: ```bash CC=arm-oe-linux-gnueabi-gcc CPP=arm-oe-linux-gnueabi-cpp \ ./configure --host=arm-oe-linux-gnueabi ``` 此方式确保了 `configure` 使用的编译器与目标三元组一致,从而避免工具链前缀不匹配问题[^1]。 ### mt manifest tool check failed 错误 `checking if mt is a manifest tool... no` 表明 `configure` 脚本尝试调用 `mt` 工具(Windows SDK 中的资源清单工具)时失败。该工具通常用于 Windows 平台的资源编译和清单嵌入,在 Linux 环境下默认不存在,因此可能导致某些跨平台项目的配置失败。 若当前项目不依赖资源清单功能,可以通过在 `configure` 命令中禁用相关功能来跳过该检查。例如: ```bash ./configure --disable-manifest-tool ``` 若项目确实需要 `mt`,则应安装 Windows SDK 或使用 Wine 运行 Windows 版本的 `mt.exe`,但此类方案通常不适用于交叉编译环境,尤其在 Linux 主机上构建嵌入式目标时较为复杂。 ### 综合配置示例 以下是一个完整的配置命令示例,适用于在 Linux 环境下为高通平台进行交叉编译,并跳过 `mt` 检查: ```bash CC=arm-oe-linux-gnueabi-gcc CPP=arm-oe-linux-gnueabi-cpp \ CXX=arm-oe-linux-gnueabi-g++ \ ./configure --host=arm-oe-linux-gnueabi \ --build=x86_64-linux-gnu \ --prefix=/opt/arm-oe-linux-gnueabi \ --disable-manifest-tool ``` 该配置显式指定了交叉编译器、预处理器和 C++ 编译器,并跳过了与 `mt` 相关的检查,适用于大多数嵌入式或跨平台 Linux 项目[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值