交叉编译 configure
。。
$ tar zxf readline-5.2.tar.gz $ cd readline-5.2/ $ ./configure --host=arm-linux --prefix=$(pwd)/_install $ make $ make install 中 ./configure --host=arm-linux --prefix=$(pwd)/_install的含义 $ ./configure 下面两个都是运行configure时给的参数 --host=arm-linux 运行环境 (交叉编译成arm) --prefix=$(pwd)/_install 安装目录 指定安装目录 如果不指定是安装的在默认的目录下,/usr/local pwd是当前用户目录。
。。
Linux的交叉编译 及configure配置 - Hello~again - 博客园
在交叉编译时运行 ./configure
的主要目的是针对目标平台(而非当前宿主机)配置软件构建环境。以下是详细解释和关键步骤:
核心作用
-
检测目标平台特性
- 确定目标架构的 CPU 指令集、字节序(大端/小端)、内存对齐方式等。
- 检查目标系统支持的库(如 glibc 版本)和头文件是否存在。
-
生成适配目标平台的 Makefile
- 根据目标平台调整编译器选项(如
-march
、-mtune
)。 - 启用或禁用特定功能模块(例如:是否需要支持 GPU 加速)。
- 根据目标平台调整编译器选项(如
-
指定交叉编译工具链
- 设置交叉编译器(如
arm-linux-gnueabihf-gcc
)、链接器等路径。 - 覆盖默认的编译工具和标志(如
CFLAGS
,LDFLAGS
)。
- 设置交叉编译器(如
关键参数与用法
在交叉编译时,必须明确以下参数:
参数 | 作用 | 示例 |
---|---|---|
--host |
指定目标平台三元组 | --host=arm-linux-gnueabihf |
--build |
指定宿主机平台(通常自动检测) | --build=x86_64-linux-gnu |
--target |
仅对编译工具链时有效(如 GCC) | 一般交叉编译时不需设置 |
CC |
指定 C 编译器 | CC=arm-linux-gnueabihf-gcc |
CXX |
指定 C++ 编译器 | CXX=arm-linux-gnueabihf-g++ |
PKG_CONFIG_PATH |
指定目标平台的 pkg-config 路径 | PKG_CONFIG_PATH=/目标路径/lib/pkgconfig |
完整命令示例:
./configure \
--host=arm-linux-gnueabihf \
CC=arm-linux-gnueabihf-gcc \
CXX=arm-linux-gnueabihf-g++ \
PKG_CONFIG_PATH=/cross-rootfs/usr/lib/pkgconfig
主流处理器架构分类表
架构 | 位数 | 指令集类型 | 典型应用场景 | 代表厂商/设备 | 工具链示例(GCC) |
---|---|---|---|---|---|
x86 | 32 位 | CISC | 旧款 PC、低功耗嵌入式设备 | Intel Pentium, AMD Athlon | i686-linux-gnu |
x86_64 | 64 位 | CISC | 现代 PC、服务器、云计算 | Intel Core, AMD Ryzen | x86_64-linux-gnu |
ARMv7 | 32 位 | RISC | 移动设备、嵌入式系统 | 树莓派 3, Cortex-A系列 | arm-linux-gnueabihf |
ARMv8/AArch64 | 64 位 | RISC | 高端手机、服务器、单板计算机 | 树莓派 4, AWS Graviton | aarch64-linux-gnu |
MIPS | 32/64 位 | RISC | 路由器、网络设备、早期嵌入式 | 华硕路由器, 索尼 PlayStation 1 | mips-linux-gnu |
PowerPC | 32/64 位 | RISC | 工业控制、高性能计算 | IBM POWER系列, PlayStation 3 | powerpc-linux-gnu |
RISC-V | 可变 | RISC | 开源硬件、IoT、学术研究 | SiFive开发板, 阿里平头哥芯片 | riscv64-linux-gnu |
SPARC | 64 位 | RISC | 企业级服务器(逐渐被替代) | Oracle SPARC T系列 | sparc64-linux-gnu |
Xtensa | 32 位 | 可定制 | 物联网设备、低功耗场景 | ESP32/ESP8266 Wi-Fi模块 | xtensa-esp32-elf |
LoongArch | 64 位 | 自主指令集 | 中国自主研发的桌面/服务器 CPU | 龙芯 3A5000 | loongarch64-linux-gnu |
关键架构详解
1. x86/x86_64
- 特点:CISC 指令集,高度兼容,主导 PC 和服务器市场。
- 工具链:
x86_64-linux-gnu
(64位)或i686-linux-gnu
(32位)。 - 场景:Windows/Linux 桌面应用、数据中心。
2. ARM
- 变体:
- ARMv7(32位):硬浮点(
-gnueabihf
)用于性能敏感设备(如树莓派 3)。 - ARMv8(64位):默认集成 SIMD/浮点指令,适用于现代移动设备和云服务器。
- ARMv7(32位):硬浮点(
- 工具链:通过
-march
指定具体核心(如cortex-a53
)。
3. RISC-V
- 优势:开源指令集,模块化设计(可扩展指令),IoT 和定制芯片首选。
- 生态:Linux 已支持,工具链需从源码构建或使用预编译版本(如
riscv-gnu-toolchain
)。
4. MIPS
- 现状:曾广泛用于路由器和嵌入式设备,逐渐被 ARM 和 RISC-V 替代。
- 工具链:需注意大端(
mips-linux-gnu
)或小端(mipsel-linux-gnu
)配置。
5. PowerPC
- 应用:IBM 服务器、航空航天(抗辐射设计),部分工业控制器仍在使用。
- 工具链:
powerpc-linux-gnu
(32位)或powerpc64-linux-gnu
(64位)。
如何选择架构?
- 性能需求:x86_64/ARMv8 适合高性能计算,RISC-V/MIPS 用于低功耗场景。
- 生态支持:ARM 和 x86 拥有最完善的软件生态,RISC-V 正在快速追赶。
- 成本与授权:RISC-V 无授权费,适合定制化需求;ARM 需支付架构授权费。