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++项目,且是面向对象开发。

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第1张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第2张图片

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

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第3张图片

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第4张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第5张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第6张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第7张图片

 FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第8张图片

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第9张图片 ④按下键盘的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按钮。

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第10张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第11张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第12张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第13张图片

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

FPGA----Vivado SDK创建并使用静态链接库(C/C++代码移植)_第14张图片

 点击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

你可能感兴趣的:(c++,开发语言)