Windows環境下為Android編譯OpenCV4.3


Windows環境下為Android編譯OpenCV4.3

踩了三四天的坑,今天終於順利跑通了,原來是toolchain的問題,外網的教程大多都是用opencv source里的toolchain,會導致各種奇奇怪怪的錯誤(std not a member of std,canot find iostram等等)

環境配置

本文編譯環境如下:

  1. 首先需要下載OpenCV 4.3.0 源碼,根據需求再加上OpenCV_contrib 4.3.0 源碼,解壓放到你記得住的文件夾

  2. 下載 cmake 3.18 圖方便直接選安裝包就行 cmake-3.18.0-rc1-win64-x64.msi

  3. 下載 Mingw(建議用installer傻瓜式安裝)選擇下列需要安裝的組件,右鍵選擇 Mark for Installation,之后選擇 Menu -> Installation -> Apply Changes

    安裝完后把mingw加入系統環境變量(win鍵搜索環境變量就有,編輯完后重啟系統生效)

  4. 下載 Android NDK 和 SDK,可以直接在官網下,但這里推薦直接在 Android Studio 里安排。打開AS任意一個項目,在工具欄選擇Tools -> SDK Maneger

    打開后選擇SDK Tools,勾選右下角 Show Package Details,勾選一個NDK版本,Apply。

    SDK同理,安裝完后打開 Project Structure -> SKD Location 找到SDK路徑。

    同樣要寫到環境變量里


    NDK則在 Sdk\ndk\21.2.6472646,不寫進環境變量也沒問題,待會要在cmake里配置

  5. 安裝 JDK,最低需要 8,這里用 8u251 (過高版本可能不兼容)

    同樣需要配置環境變量

    還需加入

    對着打就行,重啟后可以用cmd測試是否配置成功

  6. 下載 ANT 1.10.7,放到你記得住的目錄

編譯配置

新建一個存放編譯結果的文件夾,比如我就放在 G:\opencv\android_build,解壓后源碼放在 G:\opencv\source

運行 cmake-gui (找不到就按win搜索)

將源碼和輸出地址填入這里

點擊 Add Entry,添加以下幾個屬性

  • ANDROID_NDK 類型為PATH,填入你的NDK路徑(AS下載的就在Sdk\ndk\21.2.6472646
  • ANDROID_SDK PATH,填入你的SDK路徑
  • ANDROID_ABI STRING,設置平台,不填默認為 armeabi-v7a
  • ANDROID_NATIVE_API_LEVEL STRING,默認API為21
  • ANT_EXECUTABLE PATH,填入ANT路徑下的bin(用於java 封裝,便於 AS 導入module)
  • ANDROID_STL STRING,根據需求寫入c++_staticc++_shared(默認是gnustl_static)

這時候你可以看到一片紅,不用慌,這是代表新增,不是報錯。我們點擊下方的Configure。

選擇這個選項,Next。

這里需要配置toolchain路徑,注意了,不要用源碼包里的toolchain,用你自己的ndk目錄下的toolchain,不然可能導致一系列頭文件丟失的錯誤,血的教訓=_=。

等待Configure完成,一切正常的話應該是這樣

如果你需要的話,現在可以添加opencv-contrib模塊,搜索 extra,在 OPENCV_EXTRA_MODULES_PATH 添加路徑 ....../opencv_contrib-4.3.0/modules。(需要重新添加NDK路徑)

參數調整

以下參數根據自己需求調整

  • BUILD_ANDROID_PROJECTS 不需要示例項目可直接取消勾選

  • BUILD_ANDROID_EXAMPLES = OFF

  • BUILD_PERF_TESTS = OFF

  • BUILD_TESTS = OFF

  • BUILD_opencv_world = OFF (生成 .so 庫 libopencv_world.so,這是一個集合,不清楚和默認編譯的 libopencv_java3.so 有什么區別,默認不開啟,如果開啟的話不會復制 java 層函數,也就是 cmake 的 gui 界面會顯示 Java wrappers: NO)

  • BUILD_SHARED_LIBS = OFF (如果 On 則只編譯 so 庫)

  • WITH_CUDA = OFF (CUDA 是 NVidia 推出的並行計算架構,編譯非安卓 SDK 時建議添加)

  • WITH_OPENCL = ON (因為我們編譯的是 android sdk,所以建議添加移動端的並行架構支持)

  • WITH_OPENCL_SVM = ON (建議開啟共享虛擬內存)

調整完后再次點擊Configure,完成后點擊Generate。

執行編譯

完成后通過命令行工具 cmd (管理員身份) 進入 你的build文件夾,或者直接在 buid 文件夾右鍵選擇 Gitbash

輸入命令 mingw32-make.exe

如果沒有出現報錯,則再輸入 mingw32-make.exe install

編譯完成,打開AS的項目,在工具欄選擇File -> New -> Import_Module,把 build/install/sdk/java 導入即可(如果你有配置ANT的話)或者直接copy編譯出來的.a或者.so在AS里連接,之后可能會寫。

錯誤處理總結我之后在寫,可以把報錯貼到評論區或者私聊問我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM