记录一次在x86 软件中使用dpdk 的历程(Makefile && gcc改成g++)

我们一台服务器上原本是用grub下预留内存的方式, 然后把物理地址在板卡上的配置文件中传给L1.

但是在客户的环境上服务器windriver上不是能预留内存的. 所以服务器上需要在testMxx程序中用dpdk的方式分配出内存, 然后,  把物理地址通过sdp虚拟的网口, 用socket 传给L1.

1. 开始的想法是, 把dpdk 编译好后, 把.a 连接进testMxx. 

修改makefile 增加: -L xx -lret_eal

编译都成功了, 在ld时, 发现rte_eal 中引用的内核函数是找不到的.

但是helloworld 编译的时候是找的到的. 所以想用helloworld的makefile来改

2. 使用dpdk 自带的helloworld 中的makefile. 增加testMxx的代码后, 发现编译的时候, 很多cpp的文件中的语法是识别不到的. 改makefile的时候, 要注意里边有两个分支, 可以删除了用else中的分支.

关键是要用: include $(RTE_SDK)/mk/rte.vars.mk
就是这个mk 文件中, 把所有dpdk的配置弄好了. 不会找不到dpdk的lib.

 现在分析为什么不能识别cpp 文件中语法. 猜测dpdk 用的是gcc 的编译器.

分析:$(RTE_SDK)/mk/rte.vars.mk 后发现里边会:

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

里边会:

#
# toolchain:
#
#   - define CC, LD, AR, AS, ...
#   - define TOOLCHAIN_CFLAGS variable (overridden by cmdline value)
#   - define TOOLCHAIN_LDFLAGS variable (overridden by cmdline value)
#   - define TOOLCHAIN_ASFLAGS variable (overridden by cmdline value)
#   - may override any previously defined variable
#
include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.vars.mk

根据$(RTE_TOOLCHAIN) 会走不同的文件夹.

toolchain 文件夹下有以下文件夹:

 可以坐实确实只有gcc 这个编译. 现在的想法就是把gcc 相关的都改成g++ 试下.

实现方法:

 把 RTE_TOOLCHAIN 设置成gcc.

export RTE_TOOLCHAIN=gcc

然后把gcc 文件夹下的Mk文件改为:

编译的时候发现testxx可以编译了, 但是dpdk 又不行了. 

解决方法: gcc 文件件不动, 加一个g++文件夹. 然后指定用哪个toolchain.

dpdk:export RTE_TOOLCHAIN=gcc

testxx:export RTE_TOOLCHAIN=g+=

这样就可以编译了.

这个时候cpp文件中的语法是可以识别了, 但是出现了很多指针转换的错误:

增加: CFLAGS += -fpermissive 后解决.

这样错误没有了. 不过在ld的时候, 我看所有.o都编译出来了. 但是, ld时这些文件中的函数还是不能找到. 后边发现只有配置到SRCS-y += xx.c 中的文件, 对应的.o 才能成功link.

所以把其他所有.o的文件都这样操作一下.

再编译发现Link时有很多重定义.  发现是SRCS-y += xx.c中有很多重复的. 删除 重复的后可以成功了.

不过testxx中有一个cpp文件, 就算.o成功了. Ld的时候还是找不到这个文件. 改成.c后. 就可以了.

最后:

编译出了bin文件.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值