记录一次在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文件.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

日撸 Java 三百行day38

文章目录 说明day381.Dijkstra 算法思路分析2.Prim 算法思路分析3.对比4.代码 说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/…

接口测试入门必会知识总结(学习笔记)

目录 什么是接口? 内部接口 外部接口 接口的本质 什么是接口测试? 反向测试 为什么说接口测试如此重要? 越接近底层的 Bug,影响用户范围越广 目前流行的测试模型 接口测试的优越性 不同协议形式的测试 接口测试工作场景…

HTB靶机03-Shocker-WP

Shocker scan 2023-03-30 23:22 ┌──(xavier㉿xavier)-[~/Desktop/Inbox] └─$ sudo nmap -sSV -T4 -F 10.10.10.56 Starting Nmap 7.91 ( https://nmap.org ) at 2023-03-30 23:22 HKT Nmap scan report for 10.10.10.56 Host is up (0.40s latency). Not shown: 99 clos…

WindowsGUI自动化测试项目实战+辛酸过程+经验分享

WindowsGUI自动化测试项目实战辛酸过程经验分享 一、前言⚜ 起因⚜ 项目要求⚜ 预研过程⚜⚜ 框架选型⚜⚜ 关于UIaotumation框架 ⚜ 预研成果 二、项目介绍💓 测试对象💓 技术栈💓 项目框架说明 三、项目展示🤣 界面实现效果&…

Nuxt3 布局layouts和NuxtLayout的使用

Nuxt3是基于Vue3的一个开发框架,基于服务器端渲染SSR,可以更加方便的用于Vue的SEO优化。 用Nuxt3 SSR模式开发出来的网站,渲染和运行速度非常快,性能也非常高,而且可SEO。 接下来我主要给大家讲解下Nuxt3的layouts布…

半监督目标检测

有监督目标检测: 拥有大规模带标签的数据,包括完整的实例级别的标注,即包含坐标和类别信息;弱监督目标检测: 数据集中的标注仅包含类别信息,不包含坐标信息,如图一 b 所示;弱半监督目…

漫谈大数据 - 数据湖认知篇

导语:数据湖是目前比较热的一个概念,许多企业都在构建或者准备构建自己的数据湖。但是在计划构建数据湖之前,搞清楚什么是数据湖,明确一个数据湖项目的基本组成,进而设计数据湖的基本架构,对于数据湖的构建…

Figma导出源文件的方法,用这个方法快速转换其它格式

市场上设计工具层出不穷,Sketch、AdobeXD、Axure、InVision、Figma、Pixso等都是优秀的设计工具,设计师经常面临如何从设计工具中导出文件的问题。 Figma软件的导出功能非常强大,因为轻量化体验受到很多设计师的喜爱。如何保存导出Figma源文…

【c语言】enum枚举类型的定义格式 | 基本用法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

研读Rust圣经解析——Rust learn-16(高级trait,宏)

研读Rust圣经解析——Rust learn-16&#xff08;高级trait&#xff0c;宏&#xff09; 高级trait关联类型Type为什么不用泛型而是Type 运算符重载&#xff08;重要等级不高&#xff09;重名方法消除歧义never typecontinue 的值是 ! 返回闭包 宏自定义宏&#xff08;声明宏&…

(04)基础强化:接口,类型转换cast/convert,异常处理,传参params/ref/out,判断同一对象

一、复习 1、New的截断是指什么&#xff1f; new除了新开空间创建初始化对象外&#xff0c;还有一个隐藏父类同名方法的作用。 当子类想要隐藏父类同名的方法时用new&#xff0c;用了new后父类同名方法将到此为止&#xff0c;后面 继承的…

【Java基础 1】Java 环境搭建

&#x1f34a; 欢迎加入社区&#xff0c;寒冬更应该抱团学习&#xff1a;Java社区 &#x1f4c6; 最近更新&#xff1a;2023年4月22日 文章目录 1 java发展史及特点1.1 发展史1.2 Java 特点1.2.1 可以做什么&#xff1f;1.2.2 特性 2 Java 跨平台原理2.1 两种核心机制2.2 JVM…

阳光开朗孔乙己,会否奔向大泽乡

前言 &#x1f525;学历对职业关系到底有什么影响呢&#xff1f;&#x1f525;学历给我们带来了优势吗&#xff1f;&#x1f525;到底是什么造成了"孔乙己的长衫"&#xff1f; 孔乙己是中国清代作家鲁迅创作的一篇短篇小说&#xff0c;发表于1919年。这部作品被认为是…

跌倒检测和识别2:YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码)

跌倒检测和识别2&#xff1a;YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码) 目录 跌倒检测和识别2&#xff1a;YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码) 1. 前言 2. 跌倒检测数据集说明 &#xff08;1&#xff09;跌倒检测数据集 &#xff08;2&#xff09;自定…

初学Python来用它制作一个简单的界面

前言 很多刚开始学习python的宝子&#xff0c;就想着自己开始琢磨一些界面&#xff0c;但是吧很多都是有点难度的&#xff0c;自己又琢磨不透&#xff0c;只能把代码复制粘贴运行 现在就带你们来了解一个制作简单界面的代码 ttkbootstrap 是一个基于 tkinter 的界面美化库&am…

Spring RabbitMQ 实现消息队列延迟

1.概述 要实现RabbitMQ的消息队列延迟功能&#xff0c;一般采用官方提供的 rabbitmq_delayed_message_exchange插件。但RabbitMQ版本必须是3.5.8以上才支持该插件&#xff0c;否则得用其死信队列功能。 2.安装RabbitMQ延迟插件 检查插件 使用rabbitmq-plugins list命令用于查看…

workerman开发者必须知道的几个问题

1、windows环境限制 windows系统下workerman单个进程仅支持200个连接。 windows系统下无法使用count参数设置多进程。 windows系统下无法使用status、stop、reload、restart等命令。 windows系统下无法守护进程&#xff0c;cmd窗口关掉后服务即停止。 windows系统下无法在一个…

appuploader 常规使用登录方法

转载&#xff1a;登录appuploader 登录appuploader 常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录&#xff0c;弹出登录框 在登录框内输入apple开发者账号 如果没有apple开发者账号&#xff0c;只是普通的apple账号&#xff0c;请勾选上未支付688…

本地运行 minigpt-4

1.环境部署 参考官方自带的README.MD&#xff0c;如果不想看官方的&#xff0c;也可参考MiniGPT-4&#xff5c;开源免费可本地进行图像对话交互的国产高级大语言增强视觉语言理解模型安装部署教程 - openAI 当然&#xff0c;所有的都要按照作者说明来&#xff0c;特别是版本号…

什么是3D渲染,3D渲染在CG项目中为何如此重要?

随着科技的发展&#xff0c;现如今任何人都可以使用免费软件在个人计算机上创作 3D 图像&#xff0c;当然也有人对于专业 3D 艺术的创作方式及其相关工作流程存在一些误解&#xff0c;认为创建一个模型后&#xff0c;在上面放上材料和纹理&#xff0c;就可以立马得到一个漂亮的…