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