DPDK 21.11环境下安装Pktgen缺失rte_config.h报错求助
问题现象
基于DPDK 21.11版本编译PktGen时出现如下报错,提示找不到rte_config.h头文件:
[1/69] Compiling C object lib/common/libcommon.a.p/copyright_info.c.o FAILED: lib/common/libcommon.a.p/copyright_info.c.o cc -Ilib/common/libcommon.a.p -Ilib/common -I../lib/common -I/include -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -Werror -O3 -march=native -mavx -mavx2 -DALLOW_EXPERIMENTAL_API -D_GNU_SOURCE -Wno-pedantic -Wno-format-truncation -fPIC -include rte_config.h -march=native -mno-avx512f -MD -MQ lib/common/libcommon.a.p/copyright_info.c.o -MF lib/common/libcommon.a.p/copyright_info.c.o.d -o lib/common/libcommon.a.p/copyright_info.c.o -c ../lib/common/copyright_info.c cc1: fatal error: rte_config.h: No such file or directory compilation terminated.
当前环境变量及pkg-config查询结果如下:
23:45:08 [root:~/PktGen-DPDK] dev* ± echo $RTE_SDK /root/repo/gNB_CU/ngp/thirdparty/dpdk/dpdk-21.11/ 23:45:41 [root:~/PktGen-DPDK] dev* ± echo $RTE_TARGET x86_64-native-linux-gcc 23:45:46 [root:~/PktGen-DPDK] dev* ± pkg-config --libs libdpdk -Wl,--as-needed -L/lib64 -lrte_node -lrte_graph -lrte_flow_classify -lrte_pipeline -lrte_table -lrte_pdump -lrte_port -lrte_fib -lrte_ipsec -lrte_vhost -lrte_stack -lrte_security -lrte_sched -lrte_reorder -lrte_rib -lrte_dmadev -lrte_regexdev -lrte_rawdev -lrte_power -lrte_pcapng -lrte_member -lrte_lpm -lrte_latencystats -lrte_kni -lrte_jobstats -lrte_ip_frag -lrte_gso -lrte_gro -lrte_gpudev -lrte_eventdev -lrte_efd -lrte_distributor -lrte_cryptodev -lrte_compressdev -lrte_cfgfile -lrte_bpf -lrte_bitratestats -lrte_bbdev -lrte_acl -lrte_timer -lrte_hash -lrte_metrics -lrte_cmdline -lrte_pci -lrte_ethdev -lrte_meter -lrte_net -lrte_mbuf -lrte_mempool -lrte_rcu -lrte_ring -lrte_eal -lrte_telemetry -lrte_kvargs 23:45:54 [root:~/PktGen-DPDK] dev* ± pkg-config --cflags libdpdk -I/include -include rte_config.h -march=native -mno-avx512f
错误根因
- 核心问题是
pkg-config读取到了错误的libdpdk.pc配置文件:从返回结果看,头文件搜索路径是-I/include(系统根目录下的include目录)、库搜索路径是-L/lib64(系统根目录下的lib64目录),这两个路径下都没有DPDK的头文件和库文件,直接导致编译器找不到rte_config.h。 - DPDK 21.11默认采用meson+ninja构建体系,旧版本依赖的
RTE_SDK、RTE_TARGET环境变量不再是编译PktGen的必需配置,当前设置的RTE_TARGET值不会参与编译配置,和本次报错无关。
解决步骤
- 第一步:确认DPDK 21.11已经完成编译,进入DPDK源码目录执行编译和安装(已经编译过可直接跳过编译步骤执行安装):
cd /root/repo/gNB_CU/ngp/thirdparty/dpdk/dpdk-21.11/ # 首次编译需要执行meson配置 meson build cd build ninja # 安装到系统默认路径(/usr/local) ninja install # 刷新系统动态库缓存 ldconfig
- 第二步:配置
PKG_CONFIG_PATH环境变量,让pkg-config能定位到正确的DPDK配置文件。
如果执行了上述ninja install步骤,DPDK的pc文件默认安装在/usr/local/lib64/pkgconfig路径,执行如下命令:
如果不想安装DPDK到系统路径,直接使用源码build目录下的编译产物,执行如下命令:export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATHexport PKG_CONFIG_PATH=/root/repo/gNB_CU/ngp/thirdparty/dpdk/dpdk-21.11/build/meson-private:$PKG_CONFIG_PATH - 第三步:验证pkg-config返回结果是否正常,执行
pkg-config --cflags libdpdk,正常返回的头文件路径不会出现单独的-I/include,应该是-I/usr/local/include或者对应build目录下的include路径。 - 第四步:清理PktGen旧的编译缓存,重新编译即可:
cd ~/PktGen-DPDK rm -rf build meson build cd build ninja
内容的提问来源于stack exchange,提问作者nmurshed
相关产品推荐
相关产品推荐

