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.pswp.cn/news/35463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35463.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring boot實現實體類參數自定義校驗

安裝依賴項 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>1、新建實體類 Data public class UserEntity {private String name;private Integer age;…

RocketMQ 延遲消息

RocketMQ 延遲消息 RocketMQ 消費者啟動流程 什么是延遲消息 RocketMQ 延遲消息是指&#xff0c;生產者發送消息給消費者消息&#xff0c;消費者需要等待一段時間后才能消費到。 使用場景 用戶下單之后&#xff0c;15分鐘未支付&#xff0c;對支付賬單進行提醒或者關單處理…

PostgreSQL查詢慢sql原因和優化方案

PostgreSQL sql查詢慢優化方案有一下幾種解決方案&#xff1a; 1.關閉會話 查詢慢sql的執行會話&#xff0c;關閉進程。 查看數據庫后臺連接進程 SELECT count(*) FROM pg_stat_activity;SELECT * FROM pg_stat_activity; 查看數據庫后臺連接進程&#xff0c;但是此條SQL不…

python提取pdf圖片

import fitz import re import osdef save_pdf_img(path, save_path):path: pdf的路徑save_path : 圖片存儲的路徑# 使用正則表達式來查找圖片checkXO r"/Type(? */XObject)"checkIM r"/Subtype(? */Image)"# 打開pdfdoc fitz.open(path)# 圖片計數im…

用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 客戶端連接服務器進行數據回環測試&#xff0c;那么本章將用開發板做TCP服務器來進行數據回環測試。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一種面向連…

zabbix監控安裝部署

目錄 一、環境 二、配置 1.配置yum源&#xff0c;這里用的清華的 2.過濾一下安裝包&#xff0c;查看依賴包 安裝依賴包 3.配置數據庫 開機自啟 創建數據庫 創建用戶 授權 導入數據到數據庫 查看zabbix數據庫有沒有表和數據 4.修改zabbix配置文件 1.修改zabbix配置…

去趨勢化一個心電圖信號、信號功率譜、低通IIR濾波器并平滑信號、對濾波器引起的延遲進行補償研究(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

SPM實現framework自動管理和分發

一、前言 Swift Package Manager (SPM) 是蘋果官方提供的用于管理 Swift 項目的依賴關系和構建過程的工具。它是一個集成在 Swift 編程語言中的包管理器&#xff0c;用于解決在開發過程中管理和構建包依賴項的需求。 那么如何使用SPM管理和分發Objective C編寫的二進制庫呢&a…

HOT86-單詞拆分

leetcode原題鏈接&#xff1a;單詞拆分 題目描述 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。請你判斷是否可以利用字典中出現的單詞拼接出 s 。注意&#xff1a;不要求字典中出現的單詞全部都使用&#xff0c;并且字典中的單詞可以重復使用。 示例 1&#xff1a…

不同路徑 II——力扣63

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

一鍵登錄是如何在登錄方式中脫穎而出的?

首先&#xff0c;我們先了解一下登錄方式的演變過程&#xff0c;大致可以分為三個階段。分別是賬號密碼登錄、短信驗證碼登錄和一鍵登錄。 階段一&#xff1a;賬號密碼登錄 賬號密碼登錄是一種常見的用戶身份驗證方式&#xff0c;用戶需要輸入一個唯一的賬號和對應的密碼來登…

【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循環都用于重復執行特定…

Linux一些常見的命令

1. 基礎命令 1. ls&#xff1a; 列出目錄內容。- 例如&#xff1a;ls -l 以長格式列出文件和目錄。2. cd&#xff1a; 切換工作目錄。- 例如&#xff1a;cd /home/user 進入 /home/user 目錄。3. pwd&#xff1a; 顯示當前工作目錄的路徑。4. mkdir&#xff1a; 創建新目錄。-…

flink-對齊和不對齊,精準一次和至少一次

精準一次怎么保證&#xff1f;可以設置為以下2個 對齊 當有一個barrier比較快時&#xff0c;輸入緩沖區阻塞&#xff0c;當另外一個barrier到來時&#xff0c;才進行備份&#xff0c;所以數據不會重復。優點&#xff1a;不會造成數據重復缺點&#xff1a;會造成數據積壓&#x…

ChatGPT Plus和ChatGPT對比

模型規模更大&#xff0c;參數數量超過6萬億&#xff0c;比ChatGPT大很多訓練數據更豐富&#xff0c;包括不同語言、領域和類型的數據語言理解和生成能力更強&#xff0c;能夠更準確地理解和生成文本可解釋性和可控性更好&#xff0c;支持更多的調參和控制參數&#xff0c;生成…

uni-app和springboot完成前端后端對稱加密解密流程

概述 使用對稱加密的方式實現。前端基于crypto-js。uni-app框架中是在uni.request的基礎上&#xff0c;在攔截器中處理的。springboot在Filter中完成解密工作。 uni-app 項目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(…

最強自動化測試框架Playwright(20)- iframe

一個頁面可以附加一個或多個 Frame 對象。每個頁面都有一個主框架&#xff0c;并且假定頁面級交互&#xff08;如&#xff09;在主框架中運行。click frame_locator 使用 iframe 時&#xff0c;可以創建一個框架定位器&#xff0c;該定位器將進入 iframe 并允許選擇該 iframe…