Intel® Distribution of OpenVINO™ Toolkit
Community assistance about the Intel® Distribution of OpenVINO™ toolkit, OpenCV, and all aspects of computer vision-related on Intel® platforms.
6597 Discussions

Openvino build not generating libinference_engine_java_api.so

Madhini123
Beginner
2,033 Views

Hello ,

 

I have been trying to build openvino ( .jar) and related (.so ) for my openvino object detection android app.  The .jar is not getting generated. Hence I used the openvino-2023.0-windows-x86_64.jar from dkurt/release git repositories.  The .jar requires the libinference_engine_java_api.so internally and the app gets installed and crashes with this fatal error.

Hence I started building the openvino and openvino_contrib for arm cpu , but in vain. The below jar and .so are not getting generated . I have been stuck with this issue for past 2 months.

libinference_engine_java_api.so  
libc++_shared.so
libopenvino_arm_cpu_plugin.so
libopenvino_gapi_preproc.so
libopenvino_tensorflow_fe.so
 
and also the .jar .
 
I have attached the script file using for my build. Currently using a debian VM cloud to build my jar as the virtual VM is hanging because of low RAM .
Please find the script file for your reference.
It would be very great if someone could help me 
 
Regards,
Madhini Balaji
0 Kudos
14 Replies
Zulkifli_Intel
Moderator
1,950 Views

Hi Madhini123,

Thank you for contacting us.

 

The creation of the native library file libinference_engine_java_api.so generally occurs on a desktop (or server) environment, not directly within an Android application.

 

You are using Android Java, which uses Android AAR, and it will produce:

  • openvino-android.aar
  • libopenvino.so

 

 

Regards,

Zul


0 Kudos
Madhini123
Beginner
1,861 Views

Hi Zul,

 

Thanks for responding.  I shall build openvino on windows environment with the below cmake command

 

cmake -S %OPV_HOME_DIR%/one-tbb ^
-B %OPV_HOME_DIR%/one-tbb-build ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=%OPV_HOME_DIR%/one-tbb-install ^
-DCMAKE_TOOLCHAIN_FILE=%CURRENT_CMAKE_TOOLCHAIN_FILE% ^
-DANDROID_ABI=%CURRENT_ANDROID_ABI% ^
-DANDROID_PLATFORM=%CURRENT_ANDROID_PLATFORM% ^
-DANDROID_STL=%CURRENT_ANDROID_STL% ^
-DTBB_TEST=OFF ^
-DCMAKE_SHARED_LINKER_FLAGS="-Wl,--undefined-version". 

followed by 

# Build OneTBB™ project 
cmake --build $OPV_HOME_DIR/one-tbb-build --parallel
# Install OneTBB™ project 
cmake --install $OPV_HOME_DIR/one-tbb-build

 Hope this will generate the jar and libinference_java_api.so

Regards,

Madhini

0 Kudos
Zulkifli_Intel
Moderator
1,802 Views

Hi Madhini123,


Let us know if you can generate the files.



Regards,

Zul


0 Kudos
Madhini123
Beginner
1,726 Views

Hi Zul,

 

Please let me know if I should use openvino/docs/dev/build_windows.md at master · openvinotoolkit/openvino · GitHub  or 

openvino/docs/dev/build_android.md at master · openvinotoolkit/openvino · GitHub

 

When i followed the steps build_windows.md , I got the following error 

 

Done Building Project "C:\Users\madhi\Phd\openvino_android\openvino\build\samples\cpp\benchmark\sync_benchmark\ov_sampl
es.vcxproj" (default targets) -- FAILED.

Done Building Project "C:\Users\madhi\Phd\openvino_android\openvino\build\ALL_BUILD.vcxproj" (default targets) -- FAILE
D.


Build FAILED.

"C:\Users\madhi\Phd\openvino_android\openvino\build\ALL_BUILD.vcxproj" (default target) (1) ->
"C:\Users\madhi\Phd\openvino_android\openvino\build\src\plugins\auto_batch\openvino_auto_batch_plugin.vcxproj" (default
target) (6) ->
"C:\Users\madhi\Phd\openvino_android\openvino\build\src\plugins\auto_batch\openvino_auto_batch_plugin_version.vcxproj"
(default target) (7) ->
"C:\Users\madhi\Phd\openvino_android\openvino\build\src\openvino.vcxproj" (default target) (9) ->
"C:\Users\madhi\Phd\openvino_android\openvino\build\src\common\transformations\openvino_transformations_obj.vcxproj" (d
efault target) (22) ->
(ClCompile target) ->
C:\Users\madhi\Phd\openvino_android\openvino\src\common\transformations\src\transformations\common_optimizations\conv
ert_quantize_dequantize.cpp(146,1): fatal error C1001: Internal compiler error. [C:\Users\madhi\Phd\openvino_android\op
envino\build\src\common\transformations\openvino_transformations_obj.vcxproj]

0 Warning(s)
1 Error(s)

Time Elapsed 00:18:39.28

 

Regards,

Madhini B

0 Kudos
Zulkifli_Intel
Moderator
1,582 Views

Hi Madhini123.

If you want to run OpenVINO on Android system, use build_android.md. This will produce:

  • openvino-android-*.aar
  • libopenvino.so

 

If you want to run OpenVINO on Windows, use build_windows.md. This will produce (If Java is enabled in the build):

  • openvino.jar
  • libinference_engine_java_api.so (for Linux)
  • inference_engine_java_api.dll (for Windows)

 

 

Regards,

Zul


0 Kudos
Madhini123
Beginner
1,542 Views

Hi Zul,

 

In that case, I need the android app on the mobile that I am building in my Windows system to use Openvino.  So I will start using the build_android.md . For the ANDROID_ABI  , should i have to give x86_64 or arm64-v8a. Could you please confirm

  • ANDROID_ABI specifies the target architecture:
    • x86_64 for x64 build
    • armeabi-v7a with NEON for ARM with NEON support
    • arm64-v8a for ARM 64 bits
    • riscv64 for RISC-V 64 bits (experimental)

REgards,

Madhini B

0 Kudos
Zulkifli_Intel
Moderator
1,396 Views

Hi Madhini123.

 Most Android devices use ARM-based chips. So I would recommend arm64-v8a.

 

 

Regards,

Zul


0 Kudos
Madhini123
Beginner
1,285 Views

Hi Zul,

 

I have used the below cmake command and *.aar didnt get generated. I have used a Linux machine for the build . Please let me know if anything is missed out .

#!/bin/bash
set -e

# ===== CONFIGURATION =====
WORK_DIR=/dev/shm/openvino_android
INSTALL_DIR=$WORK_DIR/install
NDK_VERSION=r25c
NDK_ZIP=android-ndk-$NDK_VERSION-linux.zip
ANDROID_ABI=arm64-v8a
ANDROID_API=29

OPENCV_VERSION=4.10.0
OPENCV_ZIP=opencv-$OPENCV_VERSION-android-sdk.zip
OPENCV_URL=https://github.com/opencv/opencv/releases/download/$OPENCV_VERSION/$OPENCV_ZIP
# =========================

mkdir -p "$WORK_DIR"
cd "$WORK_DIR"

echo "=== Cleaning old directories ==="
rm -rf openvino openvino_contrib build ndk install opencv-$OPENCV_VERSION-android-sdk

echo "=== Installing dependencies ==="
sudo apt update
sudo apt install -y git cmake ninja-build python3 unzip build-essential wget

echo "=== Downloading Android NDK $NDK_VERSION ==="
if [ ! -d "$WORK_DIR/ndk" ]; then
    wget "$NDK_URL" -O "$NDK_ZIP"
    unzip -q "$NDK_ZIP"
    mv android-ndk-$NDK_VERSION ndk
fi
export ANDROID_NDK="$WORK_DIR/ndk"

echo "=== Downloading OpenCV Android SDK $OPENCV_VERSION ==="
if [ ! -d "$WORK_DIR/opencv-$OPENCV_VERSION-android-sdk" ]; then
    wget "$OPENCV_URL" -O "$OPENCV_ZIP"
    unzip -q "$OPENCV_ZIP"
fi
export OpenCV_DIR="$WORK_DIR/opencv-$OPENCV_VERSION-android-sdk/sdk/native/jni"

echo "=== Cloning OpenVINO repositories ==="

echo "=== Updating submodules (pugixml, etc.) ==="
cd openvino
cd
cd "$WORK_DIR"

echo "=== Creating build directory ==="
mkdir -p build
cd build

echo "=== Configuring CMake for Android ARM64 ==="
cmake -GNinja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \
  -DANDROID_ABI="$ANDROID_ABI" \
  -DANDROID_PLATFORM="$ANDROID_API" \
  -DANDROID_STL=c++_shared \
  -DIE_EXTRA_MODULES=.../openvino_contrib/modules \
  \
  -DENABLE_INTEL_CPU=OFF \
  -DENABLE_ONEDNN_FOR_ARM=OFF \
  -DENABLE_ARM_CPU=ON \
  -DENABLE_ACL=ON \
  -DENABLE_ARM_COMPUTE=ON \
  \
  -DBUILD_java_api=ON \
  -DENABLE_SAMPLES=ON \
  -DENABLE_TESTS=OFF \
  -DENABLE_PYTHON=OFF \
  -DENABLE_OPENCV=ON \
  -DOpenCV_DIR="$OpenCV_DIR" \
  \
  -DTHREADING=SEQ \
  -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
  -S "$WORK_DIR/openvino"

echo "=== Building OpenVINO ==="
ninja -j$(nproc)

echo "=== Installing OpenVINO ==="
ninja install

echo "=== DONE ==="
echo "Installed in: $INSTALL_DIR"
 
The following .so were generated 
libopenvino_auto_batch_plugin.so
libopenvino_auto_plugin.so
libopenvino_c.so
libopenvino_hetero_plugin.so
libopenvino_ir_frontend.so
libopenvino_onnx_frontend.so
libopenvino_paddle_frontend.so
libopenvino_pytorch_frontend.so
libopenvino_tensorflow_frontend.so
libopenvino_tensorflow_lite_frontend.so
libopenvino.so
 
Regards,
Madhini B
0 Kudos
Zulkifli_Intel
Moderator
1,266 Views

Hi Madhini123,

 

From your output, we can see that the build is correct. The missing .aar file could be that some step is missing. I'm checking into this and will get back to you.

 


Regards,

Zul


0 Kudos
Madhini123
Beginner
976 Views

Hi Zul,

 

 I shall await for the response 

 

Regards,

Madhini B

0 Kudos
Zulkifli_Intel
Moderator
851 Views

Hi Madhini123,

 

My apologies for the misunderstanding. The OpenVINO build process for Android does not generate any .aar files. The process ended properly and generated the following files:

 

 libopenvino_arm_cpu_plugin.so

libopenvino_auto_batch_plugin.so

libopenvino_auto_plugin.so

libopenvino_c.so

libopenvino_genai_c.so

libopenvino_genai.so

libopenvino_hetero_plugin.so

libopenvino_ir_frontend.so

libopenvino_onnx_frontend.so

libopenvino_paddle_frontend.so

libopenvino_pytorch_frontend.so

libopenvino.so

libopenvino_tensorflow_frontend.so

libopenvino_tensorflow_lite_frontend.so

 

The process is correct, as you generated the required .so files. The difference between the files listed above and yours could be due to different configurations.

 

 

Regards,

Zul


0 Kudos
Madhini123
Beginner
554 Views

Hi Zul,

 

Thanks for the reply.   I shall recheck 

 

Currently I have started rebuilding openvino in a linux Debian machine for arm architecture following the demo on github 

 

openvino_contrib/modules/arm_plugin/demos/coco_detection_android_demo at master · IRONICBo/openvino_contrib · GitHub

 

Instead of java 8 I used java 17 as 8 is not available officially

 

sudo apt-get install -y openjdk-8-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
git clone --recurse https://github.com/openvinotoolkit/openvino.git "$WORK_DIR/openvino"
git clone --recurse https://github.com/openvinotoolkit/openvino_contrib.git "$WORK_DIR/openvino_contrib"
mkdir "$WORK_DIR/android-tools"
wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
unzip commandlinetools-linux-7583922_latest.zip
yes | ./cmdline-tools/bin/sdkmanager --sdk_root="$WORK_DIR/android-tools" --licenses 
./cmdline-tools/bin/sdkmanager --sdk_root="$WORK_DIR/android-tools" --install "ndk-bundle"
 
mkdir "$WORK_DIR/openvino_build" "$WORK_DIR/openvino_install"
cmake -GNinja \
      -DVERBOSE_BUILD=ON \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_TOOLCHAIN_FILE="$WORK_DIR/android-tools/ndk-bundle/build/cmake/android.toolchain.cmake" \
      -DANDROID_ABI=arm64-v8a \
      -DANDROID_STL=c++_shared \
      -DANDROID_PLATFORM=29 \
      -DENABLE_SAMPLES=ON \
      -DENABLE_INTEL_MYRIAD=OFF \
      -DENABLE_INTEL_MYRIAD_COMMON=OFF \
      -DBUILD_java_api=ON \
      -DTHREADING=SEQ \
      -DIE_EXTRA_MODULES="$WORK_DIR/openvino_contrib/modules" \
      -DARM_COMPUTE_SCONS_JOBS=$(nproc) \
      -DCMAKE_INSTALL_PREFIX="$WORK_DIR/openvino_install" \
      -B "$WORK_DIR/openvino_build" -S "$WORK_DIR/openvino"
ninja -C "$WORK_DIR/openvino_build"

 

I added extra flag -DENABLE_JAVA=ON

-DENABLE_PROTOBUF=ON \
-DENABLE_SYSTEM_PROTOBUF=OFF

 

The build got the following error .

 

Mkdir("build/arm64-v8.2-a")
Using compilers:
CC /dev/shm/openvino_android/android-tools/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
CXX /dev/shm/openvino_android/android-tools/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
[2344/3336] Building CXX object src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/CMakeFiles/dnnl_cpu_aarch64.dir/matmul/jit_int8_matmul.cpp.o
FAILED: src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/CMakeFiles/dnnl_cpu_aarch64.dir/matmul/jit_int8_matmul.cpp.o
/dev/shm/openvino_android/android-tools/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=aarch64-none-linux-android29 --gcc-toolchain=/dev/shm/openvino_android/android-tools/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/dev/shm/openvino_android/android-tools/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot -DDNNL_AARCH64=1 -DDNNL_ENABLE_CONCURRENT_EXEC -DDNNL_ENABLE_CPU_ISA_HINTS -DDNNL_ENABLE_MAX_CPU_ISA -DDNNL_USE_ACL -DDNNL_XBYAK_NO_EXCEPTION -DIN_OV_COMPONENT -DOV_BUILD_POSTFIX=\"\" -DOV_NATIVE_PARENT_PROJECT_ROOT_DIR=\"openvino\" -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -I/dev/shm/openvino_android/openvino_build/src/plugins/intel_cpu/thirdparty/onednn/include -I/dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/onednn/include -I/dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/ComputeLibrary -I/dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/ComputeLibrary/include -I/dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/onednn/third_party -I/dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/onednn/src -I/dev/shm/openvino_android/openvino/src/common/conditional_compilation/include -I/dev/shm/openvino_android/openvino/src/common/itt/include -I/dev/shm/openvino_android/openvino/src/common/util/include -I/dev/shm/openvino_android/openvino/thirdparty/pugixml/src -Wsuggest-override -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fsigned-char -ffunction-sections -fdata-sections -fdiagnostics-show-option -Wall -Wundef -Wmissing-declarations -Wno-error=deprecated-declarations -Wno-cpp -Wno-error -Wno-undef -Wno-missing-declarations -Wno-macro-redefined -Wno-suggest-override -fvisibility-inlines-hidden -Wall -Wno-unknown-pragmas -fvisibility=internal -Wno-pass-failed -O2 -DNDEBUG -Wformat -Wformat-security -D_FORTIFY_SOURCE=2 -fstack-protector-all -ffile-prefix-map=/dev/shm/openvino_android/openvino/= -ffile-prefix-map=../openvino/= -Wno-error=deprecated-declarations -Wno-cpp -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++20 -MD -MT src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/CMakeFiles/dnnl_cpu_aarch64.dir/matmul/jit_int8_matmul.cpp.o -MF src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/CMakeFiles/dnnl_cpu_aarch64.dir/matmul/jit_int8_matmul.cpp.o.d -o src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/CMakeFiles/dnnl_cpu_aarch64.dir/matmul/jit_int8_matmul.cpp.o -c /dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/matmul/jit_int8_matmul.cpp
/dev/shm/openvino_android/openvino/src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/matmul/jit_int8_matmul.cpp:28:10: fatal error: 'ranges' file not found
#include <ranges>
^~~~~~~~
1 error generated.
[2349/3336] Building CXX object src/plugins/intel_cpu/thirdparty/onednn/src/cpu/aarch64/CMakeFiles/dnnl_cpu_aarch64.dir/jit_uni_softmax.cpp.o
ninja: build stopped: subcommand failed.

 

Everytime the build failed in the dnn library 

 

Could you please let me know if anything is wrong. 

 

Regards,

Madhini B

0 Kudos
Zulkifli_Intel
Moderator
332 Views

Hi 四月七月,

I tested the guide from openivno_contrib Github for android_demo, and was able to build OpenVINO without any issues. I think you should use this as a reference.

 

 

Regards,

Zul


0 Kudos
Madhini123
Beginner
2 Views

Hi Zul,

 

I shall recheck again with the link posted and update the status of the build

 

Regards,

Madhini

0 Kudos
Reply