1. 问题背景与现象分析
最近在Ubuntu 16.04系统上编译DPDK 19.08.2时遇到了一个棘手的架构不匹配问题。作为数据平面开发套件,DPDK的编译过程通常会比较顺利,但这次却意外地卡在了驱动编译环节。以下是完整的排查和解决过程,希望能帮助遇到类似问题的同行。
1.1 环境配置详情
先来看下我的基础环境配置:
| 项目 | 版本 |
|---|---|
| 操作系统 | Ubuntu 16.04 LTS |
| DPDK版本 | 19.08.2稳定版 |
| GCC编译器 | 5.4.0 |
| Binutils | 2.26.1 |
| 目标架构 | x86_64 |
这个环境看起来没什么特别之处,都是比较常见的配置组合。
1.2 错误现象初现
当我执行标准的编译命令时:
bash复制make config T=x86_64-native-linuxapp-gcc
make -j$(nproc)
编译过程在FSLMC/DPAA2驱动部分报错,关键错误信息如下:
code复制ld: i386:x86-64 architecture of input file `portal/dpaa2_hw_dpio.o.pmd.o'
is incompatible with i386 output
ld: Relocatable linking with relocations from format elf64-x86-64 (portal/dpaa2_hw_dpio.o)
to format elf32-i386 (portal/dpaa2_hw_dpio.o.o) is not supported
这个错误非常明确地告诉我们:链接器(ld)发现输入文件是64位架构(elf64-x86-64),但却试图生成32位输出(i386),这种架构不匹配导致编译失败。
2. 问题排查过程
2.1 初步尝试:禁用ARM驱动
我的第一反应是DPAA2驱动主要是为ARM架构设计的,可能在x86
