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文件几乎没有被破解的可能,本文与下面的这篇文章配套观看,加密效果最佳!