MNN 靜態庫的編譯及使用

2021-10-07 15:27:34 字數 1150 閱讀 2673

編譯步驟:

1、配置 android ndk 環境變數 android_ndk

2、cd /path/to/mnn

3、./schema/generate.sh

4、cd project/android

編譯動態庫:

armeabi-v7a :

mkdir build_32 &&

cd build_32 &&

../build_32.sh

arm64-v8a :

mkdir build_64 &&

cd build_64 &&

../build_64.sh

編譯靜態庫庫:

armeabi-v7a :

mkdir build_32 &&

cd build_32 &&

../build_32.sh -dmnn_sep_build=false -dmnn_build_shared_libs=false

arm64-v8a :

mkdir build_64 &&

cd build_64 &&

../build_64.sh -dmnn_sep_build=false -dmnn_build_shared_libs=false

在專案中使用靜態庫時,編譯沒問題,但執行時會崩潰。

原因:靜態庫中的 op 只有乙個會鏈結到程式中,沒有將全部 op 鏈結到程式。

解決方案:在 target_link_libraries 時 libmnn.a 前後分別加上編譯選項 -wl,–whole-archive 和 -wl,–no-whole-archive ,參考鏈結,具體在 cmakelist.txt 中應用如下:

target_link_libraries(

fd_mnn

-wl,--whole-archive

$/libmnn.a

-wl,--no-whole-archive

z m)

動態庫正常引用就行

target_link_libraries(

fd_mnn

$/libmnn.so

z m)

使用openCV的靜態庫編譯

by 少俠阿朱 摘要 本文主要講述如何使用opencv靜態庫進行編譯,生成脫離opencv環境可執行.exe檔案。實現的效果 此方法生成的exe檔案在其他沒有配置opencv環境的電腦上可直接執行。使用到的工具 opencv2.411 vs2013 debug模式下編譯流程如下 首先 專案的debu...

庫檔案(動態庫 靜態庫)的編譯及鏈結

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a 和動態庫 so 特點 命名規則 linux靜態庫命名規範,必須是 lib ...

gcc編譯使用靜態庫 動態庫

假設已經有可用的liboutprint.a和liboutprint.so.1.0.0可用,則 gcc o hello static l.loutprint hello.cpp gcc o hello l.loutprint hello.cpp export ld library path pwd n...