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

news2024/11/24 16:36:35

我们一台服务器上原本是用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文件.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么要清除浮动?清除浮动的方式

📝个人主页:爱吃炫迈 💌系列专栏:HTMLCSS 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 浮动的定义浮动的工作原理浮动的特性为什么要清除浮动清除浮动的方式利用clear样式…

vue3 vite typescript volar element-plus element标签报红问题的解决

故障就这样的: 模块 ""element-plus"" 没有导出的成员 "FormInstance" 至于原因咱也不知道,也没搞明白,一直以为是volar校验的问题,能开发咱就接着干,到了发布的时候傻眼了。所有这种…

API低代码平台介绍1-功能概述

API低代码平台之ADI平台 ADI平台是指Application data integration,即“应用数据集成”,使用springboot开发,并通过springcloud实现微服务,是一个动态定义Http API接口的“零代码”或“低代码”平台,支持GET(查)、POST…

Java 实现 YoloV7 人体姿态识别

1 OpenCV 环境的准备 这个项目中需要用到 opencv 进行图片的读取与处理操作,因此我们需要先配置一下 opencv 在 java 中运行的配置。 首先前往 opencv 官网下载 opencv-4.6 :点此下载;下载好后仅选择路径后即可完成安装。 此时将 opencv\b…

30基于非对称纳什谈判的多微网电能共享运行优化策略MATLAB程序

资源地址: 30基于非对称纳什谈判的多微网电能共享运行优化策略MATLAB程序资源-CSDN文库 参考文献: 《基于非对称纳什谈判的多微网电能共享运行优化策略》——吴锦领 仿真平台:MATLAB CPLEXMOSEK/IPOPT 主要内容: 主要做的是…

优思学院|精益生产为企业带来革命性转变的效益

企业的成长和发展需要不断的变革和创新,而精益生产则成为了这个时代的代名词。精益生产不仅仅是一个生产方式,更是一种革命性的转变,为企业带来了无限的效益。 什么是精益生产? 精益生产是一种基于持续改进的生产方式&#xff0…

基于matlab的混合波束成形仿真

一、前言 本示例介绍了混合波束成形的基本概念,并展示了如何仿真此类系统。 二、介绍 现代无线通信系统使用空间复用来提高散射体丰富的环境中系统内的数据吞吐量。为了通过通道发送多个数据流,从通道矩阵中导出一组预编码和组合权重。然后,可…

lammps教程:聚合物压缩,避免“bond atoms missing”

本文介绍聚合物的压缩方法。 lammps模拟聚合物体系时,最常见的一个错误是“bond atoms missing”,其中一个原因是建模方法不对。 这个原理在之前的专栏文章中已经详细介绍。 如果使用ms建模,聚合物的链会伸出到盒子外面,在导出data文件后&…

MindFusion.Diagramming for WinForms 6.8.6

您现在可以指定在修改项目时要显示的视觉效果。 2023 年 4 月 26 日 - 15:55新版本 特征 您现在可以指定在修改项目时要显示的视觉效果。新的 Opacity 属性允许您创建半透明的 DiagramItem。添加了新的 CopySelection 重载,它允许您复制项目列表而无需选择它们。您现…

OrbStack

OrbStack 是一个可以在 macOS 上快速运行 Docker 容器,和 Linux 虚拟机的工具,资源占用率低,高效,快速。 macOS 上的 Parallels Desktop 和 Docker Desktop 一直是饱受诟病,慢、重、资源消耗巨大。OrbStack 的出现就是…

goroutine和channel

进程与线程 进程就是程序执行在操作系统中的一次在执行过程,是系统进行资源分配的基本单位。 线程就是进程的一个执行实例,是程序的最小执行单元,是比进程更小的独立运行的单位。 一个进程可以创建多个线程,同一一个进程中的多…

如何在C中动态分配二维数组

在C语言中如何动态申请连续的二维数组。可以采用多申请一些指针,然后这一些指针分别指向后面数据区中对应的位置,如一个3*4的int类型数组,我们先申请大小为sizeof(int*) * 3 3 * 4 * sizeof(int)的一维数组设为arr。然后arr[0]存放指向arr …

OpenAirInterface通过docker build方式构建images

本文主要讲解如何通过build方式构建各个网元的image,因为直接pull的image无法对其进行更改,而build的镜像可以对其源代码进行编辑更改后生成镜像。 参考链接:OAI build iamges 1.获取正确的网络功能分支 此存储库仅包含教程和持续集成脚本…

有假币与求正数数组的最小不可组成和

一、编程题 1.有假币 链接:有假币__牛客网 (nowcoder.com) 居然有假币! 现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊。nowcoder这就去买猪肉,结果找来的零钱中有假币!!&#xff…

爪哇项目maven项目的打包方式

大家好 ~ 前言 现在都是使用idea中maven插件来打包项目,出现了很多问题很多类或者方法、依赖没有打入到包中,发生了很多问题,因此此文章将基于idea中的maven插件打包。 概念 打包分为小包和大包两种概念: 小包:只打…

Conda虚拟环境的复制和迁移

Conda虚拟环境的复制和迁移 在本机复制Conda虚拟环境 conda create --name snapshot --clone myenv相同操作系统之间复制环境 方法一:requirements.txt 这个方法不推荐,因为只会导出你使用pip安装的依赖包,不会导出虚拟环境所依赖的包&am…

SQL应用题分析

SQL应用题的一般考点: 基本表的查询(单表、多表、嵌入、分组、排序)、向表中插入数据、更新数据、建立视图 关系代数替换sql,使用关系代数来进行查询 基本上就这几点 SQL基本表的插入、更新和建立视图都是死板的,只…

前端开发:CSS中@import指令详解

前言 在前端开发过程中,关于CSS的使用也是非常的,尤其是样式相关的设置等操作。作为前端开发者关于import指令都会有所了解,尤其是在导入CSS样式的时候会用到,但是刚入行不久的前端开发者对应import指令会有所陌生。那么本文就来分…

项目管理:我该怎么安排下属的工作

在刚开始做项目经理的时候,分配任务时会局限于这样的心理:以前我们都是平级的同事,现在我比他们高一个级别了,我说的话他们会不会听啊。 在这个阶段,大部分项目经理都缺乏自信,觉得在项目成员心中威望不足…

Linux shell编程 条件语句if case

条件测试 test命令 测试表达式是否成立,若成立返回0,否则返回其他数值 格式1: test 条件表达式 格式2: [ 条件表达式 ]文件测试 [ 操作符 文件或者目录 ][ -e 1.txt ]#查看1.txt是否存在,存在返回0 echo $? #查看是上一步命令执行结果 0成…