DPDK编译到独立C++工程的一个方法

本文介绍了如何在已有C++项目中,避免大规模修改编译脚本,仅针对DPDK进行编译并整合的方法。关键点在于使用-Wl,--whole-archive和-Wl,--no-whole-archive选项,以解决DPDK与C++工程结合时可能出现的运行错误,如端口找不到等问题。" 125201614,13678705,二分查找与哈希查找效率对比,"['数据结构', '哈希算法', '散列表']
摘要由CSDN通过智能技术生成

这是一个实际项目中遇到的问题的解决方案, 当时已有的项目庞大而复杂, 使用g++编译, 需要用到dpdk而dpdk的编译有自己的一套框架, 把产品编译脚本全部套进去显然是不现实并且工作量太大. 下面给的是一个操作示例描述了如何编译, 如果有更好的方法也请告诉我~


1: 首先把用到dpdk的相关c文件(dpdk默认不支持c++编译)编译为.o或者.a

ifeq ($(RTE_SDK),)
$(error "Please define RTE_SDK environment variable")
endif

# Default target, can be overridden by command line or environment
RTE_TARGET ?= x86_64-native-linuxapp-gcc

include $(RTE_SDK)/mk/rte.vars.mk

# all source are stored in SRCS-y
SRCS-y := dpdk_slave.c

CFLAGS += $(WERROR_FLAGS)

EXTRA_CFLAGS += -O0 -g -w -Wfatal-errors

#include $(RTE_SDK)/mk/rte.extlib.mk
include $(RTE_SDK)/mk/rte.extobj.mk

2: 在独立的c++工程把对应.a链接进去

这里的关键是 -Wl,--whole-archive 和 -Wl,--no-whole-archive, 如果不这样的话编译可能没问题, 但是程序运行结果不对, 比如dpdk找不到port之类的问题. 

#RTE_TARGET=x86_64-native-linuxapp-gcc
DPDK_LIB_DIR=$(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值