FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)

1、在进行SoC开发时,PS端的C/C++代码可能涉及到核心算法需要移植操作,为此,本文讲述了如何将C/C++代码打包为.a文件供程序调用

2、文章以我的程序为例,逐步讲述代码生成静态链接库并调用的方法。

下面是我程序的目录结构,Util调用了Eigen矩阵运算库。load_circuit_from_case调用了xilffs(SD卡读取功能包)以及Util。circuit_sim调用了load_circuit_from_case。emtp_start调用了circuit_sim。default_main调用了emtp_start以及output_data。其中,load_circuit_from_case会形成基类,circuit_sim形成派生类,所以我的项目是C++项目,且是面向对象开发。

 3、项目建立之初的选项。下面的三个选项至关重要,请牢记。

 4、新建静态链接库项目。

①在编写好C++项目后,无需关闭SDK界面,直接在SDK界面新建静态链接库项目

 ②第一个框选成静态库,后面的三个框要与步骤3对应。点击Finish按钮。

 ③将Util所调用的全部文件,添加到Util/src文件夹下,右键src点击Refresh按钮。

 出现上述问题,是因为没有将库引入,右键Util

 

 ④按下键盘的Ctrl+B按钮,在Util/Debug下会生成libUtil.a文件,这个“libUtil”名称是自动生成的。

 ⑤在Util/src下新建lib以及include文件夹,将libUtil.a移动到lib文件夹中,Util.h以及Eigen移动到include文件夹下。删除src中的Util.cc以及Util.h文件,右键src点击Refresh按钮。

更改引用Util.h的写法为#include "include/Util.h"

 ⑥按下键盘的Ctrl+B按钮,应当出现好多报错,这是因为没有项目没有引用libUtil.a引起的。右键app_cpu0->C/C++ bulid settings需要进行如下设置。

 双击右边的第一个蓝色文本,会弹出一个提示框,复制即可。然后点击绿色的加号(右边红框),写入-Wl,--start-group,-lUtil,-lgcc,-lc,-lstdc++,--end-group

 点击右边下边的第二个红框中的绿色按钮,将app_cpu0/src/lib路径添加进去。

 点击Ok,按下键盘的Ctrl+B按钮,会发现没有报错了!

⑥重复步骤1、2新建circuit_sim项目,不建立load_circuit_from_case的原因是,这个文件调用了SD卡读取的xilffs库,我一直没有测试成果,所以我就认为凡是调用这个库的文件,均不可生成静态链接库了。将circuit_sim用到的所有文件全部移动到项目中,并重复之前的操作即可。

5、OK了,你的代码被加密了,别人看不到了,.a文件几乎没有被破解的可能,本文与下面的这篇文章配套观看,加密效果最佳!

C++代码生成静态LIB链接库及其调用方法_发光的沙子的博客-CSDN博客9、将将b.cpp、b.h添加到项目中,将a.lib以及a.h移动到项目中(如果a.cpp调用了外部包,需要将外部包也移动到b项目的目录下。2、假设有文件a.cpp、a.h、b.cpp、b.h以及main.cpp,假设main调用了b,b调用了a。6、将a.cpp、a.h添加到项目中,点击生成解决方案。10、在b项目的b.h中,之前的代码是只引用头文件,现在将lib文件也添加进去即可,一定要配置与a的平台一样,前面为x86则现在b项目也改为x86。12、新建Main项目,重复步骤4、5、9、10。https://blog.csdn.net/qq_37912811/article/details/132190372?spm=1001.2014.3001.5502

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

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

相关文章

RocketMQ 延迟消息

RocketMQ 延迟消息 RocketMQ 消费者启动流程 什么是延迟消息 RocketMQ 延迟消息是指,生产者发送消息给消费者消息,消费者需要等待一段时间后才能消费到。 使用场景 用户下单之后,15分钟未支付,对支付账单进行提醒或者关单处理…

PostgreSQL查询慢sql原因和优化方案

PostgreSQL sql查询慢优化方案有一下几种解决方案: 1.关闭会话 查询慢sql的执行会话,关闭进程。 查看数据库后台连接进程 SELECT count(*) FROM pg_stat_activity;SELECT * FROM pg_stat_activity; 查看数据库后台连接进程,但是此条SQL不…

用HARU-Net增强核分割:一种基于混合注意的残差u块网络

文章目录 Enhancing Nucleus Segmentation with HARU-Net: A Hybrid Attention Based Residual U-Blocks Network摘要本文方法损失函数后处理消融实验 Enhancing Nucleus Segmentation with HARU-Net: A Hybrid Attention Based Residual U-Blocks Network 摘要 核图像分割是…

W6100-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W6100-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试,那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么?什么是TCP Server?能干什么? TCP (Transmission Control Protocol) 是一种面向连…

zabbix监控安装部署

目录 一、环境 二、配置 1.配置yum源,这里用的清华的 2.过滤一下安装包,查看依赖包 安装依赖包 3.配置数据库 开机自启 创建数据库 创建用户 授权 导入数据到数据库 查看zabbix数据库有没有表和数据 4.修改zabbix配置文件 1.修改zabbix配置…

去趋势化一个心电图信号、信号功率谱、低通IIR滤波器并平滑信号、对滤波器引起的延迟进行补偿研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SPM实现framework自动管理和分发

一、前言 Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器,用于解决在开发过程中管理和构建包依赖项的需求。 那么如何使用SPM管理和分发Objective C编写的二进制库呢&a…

不同路径 II——力扣63

class Solution {public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int n=

【APITable】教程:创建并运行一个自建小程序

1.进入APITable&#xff0c;在想要创建小程序的看板页面点击右上角的【小程序】&#xff0c;进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序&#xff0c;选择模板&#xff0c;输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…

初识鸿蒙跨平台开发框架ArkUI-X

HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上&#xff0c;HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备&#xff0c;提供全场景&#…

99. for循环练习题-3种方式输出0-9

【目录】 文章目录 99. for循环练习题-3种方式输出0-91. for循环和while循环的区别2. 输出 0~(n-1)的数字2.1 基础代码2.2 自定义函数代码2.3 异常处理语句代码 【正文】 99. for循环练习题-3种方式输出0-9 1. for循环和while循环的区别 for循环和while循环都用于重复执行特定…

idea模板的使用(配置xml文件模板)

1. 问题的引出 我们在日常项目中可以发现&#xff0c;sql映射文件和mybatis主配置文件&#xff0c;以及application.yml文件中有很多固定不变的内容&#xff0c;为了方面使用&#xff0c;所以可以把这些xml文件设置为模板 2. 创建模板的步骤 按照图片一步一步进行即可 点击…

(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录 1、适配器模式&#xff08;Adapter Pattern&#xff09;含义 2、适配器模式应用场景 3、适配器模式的UML图学习 4、C实现适配器模式的示例 1、适配器模式&#xff08;Adapter Pattern&#xff09;含义 将一个接口转换为客户端所期待的接口&#xff0c;从而使两个接口…

Mac安装nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是说一个 nvm 可以管理多个 node 版本&#xff08;包含 npm 与 npx&#xff09;&#xff0c;可以方便快捷的安装、切换 不同版本的 node。 1、直接通过brew安装 执行命令&#xff1a;brew install nvm PS&#xff1a; 如果没有安装br…

Oracle database 静默安装 oracle 11g 一键安装

基于oracle安装包中应答文件实现一键安装 支持环境&#xff1a; Linux &#xff1a;centerOS 7 oracle &#xff1a;11.2.0 Oracle应答文件 runInstaller应答文件 /database/response/db_install.rsp netca应答文件 /database/response/netca.rsp dbca应答文件 /database/re…

python中的运算符号含义,python基本运算符的操作

本篇文章给大家谈谈python的运算符号有哪些类型&#xff0c;以及python各运算符号的功能说明&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 1.算数运算符&#xff08;最常见的&#xff09; 标准算数运算符&#xff08;加减乘除&#xff09; 取余运算…

UML-状态图

目录 状态图 状态图的图符 状态机 状态 ​转换 电话机状态图 活动图和状态图区别&#xff1a; 状态图 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为&#xff0c;显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态…

Jmeter设置中文的两种方式,建议使用第二种

方案一 进入jmeter图像化界面&#xff0c;选择Options下的Choose Language&#xff0c;再选择Chinese(Simplified)。这个就是选择语言为简体中文&#xff08;缺陷&#xff1a;这个只是在本次使用时为中文&#xff0c;下次打开默认还是英文的&#xff09; 方案二&#xff08;…

数学建模(二)线性规划

课程推荐&#xff1a;6 线性规划模型基本原理与编程实现_哔哩哔哩_bilibili 目录 一、线性规划的实例与定义 1.1 线性规划的实例 1.2 线性规划的定义 1.3 最优解 1.4 线性规划的Mathlab标准形式 1.5 使用linprog函数 二、线性规划模型建模实战与代码 2.1 问题提出 2.2…

机器学习深度学习——seq2seq实现机器翻译(详细实现与原理推导)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——seq2seq实现机器翻译&#xff08;数据集处理&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…