Как изменить каталог установки при сборке OpenCV 3.1.0 в Ubuntu 18.04 для Android NDK18rc и ARMEABI-7?

Я более недели пытаюсь скомпилировать OpenCV 3.1.0 для Android с NDK r18 на Ubuntu 18.04.

Я использовал следующую команду:

cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
  -DANDROID_NDK="/home/qamaruddin/Downloads/android-ndk-r18-linux-x86_64/android-ndk-r18/" \
  -DCMAKE_TOOLCHAIN_FILE="/home/qamaruddin/Downloads/android-ndk-r18-linux-x86_64/android-ndk-r18/build/cmake/android.toolchain.cmake" \
  -DANDROID_NATIVE_API_LEVEL=19 \
  -DANDROID_ABI="armeabi-v7a" \
  -DWITH_CUDA=OFF \
  -DWITH_MATLAB=OFF \
  -DBUILD_ANDROID_EXAMPLES=OFF \
  -DBUILD_DOCS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DBUILD_TESTS=OFF \
  -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
  -DCMAKE_C_COMPILER=/usr/bin/clang \
  -DOPENCV_EXTRA_MODULES_PATH="/opt/opencv_contrib/modules/"  \
  -DCMAKE_INSTALL_PREFIX:PATH="/home/mig-ocv/ocv-android-310/" \
  -DEXECUTABLE_OUTPUT_PATH:PATH="/home/mig-ocv/ocv-android-310/" \
  -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH="/home/mig-ocv/ocv-android-310/" \
  -DCMAKE_BUILD_TYPE=Release \
  /opt/opencv

Выполнено make & make install / strip.

Я пробовал разные версии OpenCV 3, такие как 3.1.0, 3.4.3 и 3.4.0. Я также пробовал NDKr15c, NDKr17c и NDKr18c.

Я пробовал следующие варианты:

  1. Изменить версию NDK
  2. Изменить версию OpenCV 3
  3. Установите с помощью скрипта Python, расположенного в opencv / platform / androind / setup.py
  4. Сборка с помощью CMAKE
  5. Используйте Ninja для CMAKE, но это дает ошибку: «ninja: error: loading 'build / build.global.ninja': Нет такого файла или каталога»
  6. Установить без ниндзя с CMAKE

На данный момент использование указанной выше команды для сборки CMAKE выполняется успешно, но я не могу изменить целевой каталог установки, поскольку он всегда встраивается в / usr / local /, и когда я проверяю целевой каталог, у него нет знакомого OpenCV для Структура Android, которая:

1- и т. Д. 2- java 3- родной -> jni -> включить

Интересно, что не так в моем процессе, из-за чего так сложно собрать OpenCV 3 из исходников для Android с OpenCV Contrib.

Обратите внимание, что $ ANDROID_HOME установлен в каталог Android SDK в моей системе, а также установлен $ ANDROID_NDK.

Я видел все повторяющиеся вопросы на StackOverflow и других форумах, но в моем случае ни один из них не работает.

Когда я пытаюсь построить с помощью Ninja с помощью этой команды:

cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
  -DANDROID_NDK="$HOME/Downloads/android-ndk-r17b/" \
  -DCMAKE_TOOLCHAIN_FILE="$HOME/Downloads/android-ndk-r17b/build/cmake/android.toolchain.cmake" \
  -DANDROID_NATIVE_API_LEVEL=21 \
  -DANDROID_ABI="armeabi-v7a" \
  -DWITH_CUDA=OFF \
  -DWITH_MATLAB=OFF \
  -DBUILD_ANDROID_EXAMPLES=OFF \
  -DBUILD_DOCS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DBUILD_TESTS=OFF \
  -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
  -DCMAKE_C_COMPILER=/usr/bin/clang \
  -DOPENCV_EXTRA_MODULES_PATH="$HOME/ocv/opencv_contrib/modules/"  \
  -DCMAKE_INSTALL_PREFIX:PATH="$HOME/agusta/ocv-android-310/" \
  -DEXECUTABLE_OUTPUT_PATH:PATH="$HOME/agusta/ocv-android-310/" \
  -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH="$HOME/agusta/ocv-android-310/" \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja \
  $HOME/ocv/opencv

Я получил:

CMake Deprecation Warning at CMakeLists.txt:72 (cmake_policy):


The OLD behavior for policy CMP0022 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


CMake Deprecation Warning at CMakeLists.txt:77 (cmake_policy):
  The OLD behavior for policy CMP0026 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


CMake Deprecation Warning at CMakeLists.txt:82 (cmake_policy):
  The OLD behavior for policy CMP0042 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Check for working CXX compiler: /home/qamaruddin/Downloads/android-ndk-r17b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
CMake Error: Generator: execution of make failed. Make command was: "/usr/bin/ninja" "cmTC_c4cee/fast"
-- Check for working CXX compiler: /home/qamaruddin/Downloads/android-ndk-r17b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -- broken
CMake Error at /usr/local/share/cmake-3.12/Modules/CMakeTestCXXCompiler.cmake:45 (message):
  The C++ compiler

    "/home/qamaruddin/Downloads/android-ndk-r17b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/qamaruddin/agusta/temp/CMakeFiles/CMakeTmp

    Run Build Command:"/usr/bin/ninja" "cmTC_c4cee/fast"
    No such file or directory
    Generator: execution of make failed. Make command was: "/usr/bin/ninja" "cmTC_c4cee/fast"




  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:93 (project)


-- Configuring incomplete, errors occurred!
See also "/home/qamaruddin/agusta/temp/CMakeFiles/CMakeOutput.log".
See also "/home/qamaruddin/agusta/temp/CMakeFiles/CMakeError.log".
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER= /usr/bin/clang++
CMAKE_C_COMPILER= /usr/bin/clang

-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    BUILD_ANDROID_EXAMPLES
    BUILD_DOCS
    BUILD_PERF_TESTS
    BUILD_TESTS
    EXECUTABLE_OUTPUT_PATH
    OPENCV_EXTRA_MODULES_PATH
    WITH_CUDA
    WITH_MATLAB


-- Build files have been written to: /home/qamaruddin/agusta/temp

person Mustafa Qamaruddin    schedule 06.10.2018    source источник
comment
Есть скрипт сборки и readme относительно сборки opencv для android в репозитории opencv. Обратите внимание, что он был изменен для последних версий, здесь вы можете найти его для 3.1   -  person Dmitrii Z.    schedule 06.10.2018
comment
Спасибо за ваш ответ, но я попробовал точно такую ​​же ссылку: # export CMAKE_MAKE_PROGRAM = / usr / bin / ninja # export CMAKE_CXX_COMPILER = / usr / bin / clang ++ # export CMAKE_C_COMPILER = clang # ./build_sdk.py - ndk_path / home / qamaruddin / Downloads / android-ndk-r17c-linux-x86_64 / android-ndk-r17c / --sdk_path / home / qamaruddin / android-sdks --extra_pack 3.0.1: / opt / opencv_contrib / modules / opt / opencv / build / opt / opencv Я получаю эту ошибку:   -  person Mustafa Qamaruddin    schedule 06.10.2018
comment
`Чтобы настроить набор инструментов, установите переменную CMake ANDROID_TOOLCHAIN_NAME в одно из следующих значений: * aarch64-linux-android-4.9 * arm-linux-androidabi-4.9 * x86-4.9 * x86_64-4.9 Ошибка CMake: CMake не удалось найти сборку программа, соответствующая ниндзя. CMAKE_MAKE_PROGRAM не установлен. Возможно, вам потребуется выбрать другой инструмент для сборки. Ошибка CMake: CMAKE_CXX_COMPILER не установлен, после EnableLanguage Ошибка CMake: CMAKE_C_COMPILER не установлен, после EnableLanguage `   -  person Mustafa Qamaruddin    schedule 06.10.2018
comment
`Ошибка CMake: CMake не удалось найти программу сборки, соответствующую Ninja. CMAKE_MAKE_PROGRAM не установлен. Возможно, вам потребуется выбрать другой инструмент для сборки. `   -  person Mustafa Qamaruddin    schedule 06.10.2018
comment
Если вы установите CXX_COMPILER в / usr / bin / clang ++ - как вы ожидаете, что он что-нибудь построит для Android?   -  person Dmitrii Z.    schedule 06.10.2018


Ответы (1)


Мне удалось заставить его работать, в основном, OCV не поддерживал NDKr18, и мне также пришлось установить Ninja из исходников. Я также использовал python3 вместо python2 для запуска opencv / platform / android / build_sdk.py. Еще одна вещь: я использую Eclipse Android ADT, который Google без всякой причины устарел; (но я считаю его очень быстрым по сравнению с тяжелой Android Studio.

# export ANDROID_ABI=armeabi-v7a
# export ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.8
# export ANDROID_NDK=$HOME/Downloads/android-ndk-r17c-linux-x86_64/android-ndk-r17c/
# export ANDROID_SDK=$HOME/android-sdks/

./../opencv/platforms/android/build_sdk.py --extra_modules_path=/opt/opencv_contrib/modules --config ../opencv/platforms/android/ndk-17.config.py 
person Mustafa Qamaruddin    schedule 06.10.2018