Windows環境下爲Android編譯OpenCV4.3

Windows環境下爲Android編譯OpenCV4.3

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

環境配置

本文編譯環境以下:java

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

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

    ios

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

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



    c++

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

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

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

    一樣要寫到環境變量裏





    git


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

  5. 安裝 JDK,最低須要 8,這裏用 8u251 (太高版本可能不兼容)

    一樣須要配置環境變量

    還需加入

    對着打就行,重啓後能夠用cmd測試是否配置成功







    apache

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

編譯配置

新建一個存放編譯結果的文件夾,好比我就放在 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裏鏈接,以後可能會寫。

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

相關文章
相關標籤/搜索