项目场景:

提示:这里简述项目相关背景:

新建一个docker镜像aarch64-openeuler 环境上编译ovs-2.17.7,dpdk-22.11.2。dpdk采用静态编译

问题描述

编译命令:export CFLAGS=“-D__in6_u=in6_u -D__u6_addr32=u6_addr32”
make rpm-fedora RPMBUILD_OPT=“–with dpdk --with autoenable --without check”
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


原因分析:

提示:这里填写问题的分析:
relocation R_AARCH64_ADR_PREL_PG_HI21 … recompile with -fPIC
是典型的 AArch64 静态链接 DPDK + OVS 时,非 -fPIC 对象被用于构建共享目标 的报错。

原因:你用了 --with-dpdk=static,DPDK 是 static .a 库,但 OVS 后面会生成带 PIE/PIC 要求的程序和工具,结果 static .a 里没 -fPIC,导致:

fatal-signal.o

ovs-testcontroller.o

ovs-nductl.o
原因2:
rpmbuild 的 SPEC 文件内部会覆盖 CFLAGS
configure 时传的环境变量不会自动传递到 RPM 构建阶段
rpm构建阶段 需要重新传入变量


解决方案:

  • dnf install -y python3-sphinx checkpolicy desktop-file-utils gcc-c++ graphviz groff python3-devel selinux-policy-devel unbound unbound-devel
    • dnf install -y libcap-ng-devel
    • ./boot.sh
    • ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-dpdk=static CFLAGS=“-D__in6_u=in6_u -D__u6_addr32=u6_addr32”
    • make rpm-fedora RPMBUILD_OPT=“–with dpdk --without check --without debugsource” CFLAGS=‘-fPIC -D__in6_u=in6_u -D__u6_addr32=u6_addr32’ CXXFLAGS=‘-fPIC -D__in6_u=in6_u -D__u6_addr32=u6_addr32’ LDFLAGS=‘-fPIC’ -j$(nproc)
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐