CentOS7下用ICC编译DPDK18.08后构建O-RAN ODU-Low fapi库报错
报错根因
- 工具链不匹配:你之前使用Intel ICC编译器编译了DPDK(所选编译目标为
x86_64-native-linuxapp-icc),但后续编译ODU FAPI库时使用的是GCC 4.8.5,两种编译器对DPDK头文件中的向量宏、内置类型处理逻辑不一致,最终触发_mm_storeu_si128参数类型不匹配错误。 - 编译器版本兼容问题:CentOS7默认自带的GCC 4.8.5版本过旧,对DPDK 18.08使用的SSE向量指令隐式类型转换支持存在已知缺陷。
解决步骤
方案1:统一编译工具链(优先推荐)
- 清理之前的DPDK ICC编译产物,进入DPDK源码根目录执行命令:
make clean rm -rf x86_64-native-linuxapp-icc
- 重置DPDK编译环境变量:
export RTE_TARGET=x86_64-native-linuxapp-gcc export RTE_SDK=你的DPDK源码绝对路径/dpdk-18.08
- 重新运行DPDK编译脚本:
./usertools/dpdk-setup.sh
选择对应GCC架构的编译选项(一般为[38] x86_64-native-linuxapp-gcc,具体序号以脚本实际展示为准),编译完成后退出脚本,再重新编译ODU FAPI库即可。
方案2:升级GCC版本(可选,解决版本兼容问题)
如果方案1执行后仍报错,可将GCC升级到7.x及以上版本:
- 安装CentOS SCL源和高版本GCC:
yum install centos-release-scl -y yum install devtoolset-7-gcc devtoolset-7-gcc-c++ -y
- 编译前临时启用高版本GCC:
scl enable devtoolset-7 bash
执行gcc --version确认版本为7.x后,再重新编译DPDK和ODU库即可。
临时规避方案
如果不想重新编译DPDK,可在ODU工程的编译CFLAGS参数中添加-fno-strict-aliasing -msse4.2,强制开启SSE指令集支持、关闭严格别名检查,即可绕过类型转换报错。
内容的提问来源于stack exchange,提问作者Sindhu Pitta
相关产品推荐
相关产品推荐

