編譯步驟:
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...