Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Introduction

Also, this tutorial refers to the SDK installation directory as ${SDK_DIR}.

Table of contents


Overview


C/C++ module needs to be compiled when using external library with C/C++ version AdamApp.

Here, we navigate how to build external library for C/C++ from the environment building to module compilation.

External library used in this tutorial

  • OpenCV 4.7.0

  • Curl 7.87.0

  • SQLite 3.40.0

  • libjpeg (version : 9e)

Compile C/C++ module(OpenCV)


As a tutorial, we will compile OpenCV.
Please check the official website for details of OpenCV.

http://opencv.org/

Prepare the compilation environment

OpenCV build requires "cmake", so install it.

$ sudo apt-get install cmake

Download source code

Download OpenCV source code from the URLs below.

http://opencv.org/releases/

This tutorial uses 4.7.0(opencv-4.7.0.zip).
Select the version to download according to the functions you use.

A sample Makefile and cmake file are included in the SDK for building OpenCV.

Copy the downloaded source code (opencv-4.7.0.zip) to the folder below.

${SDK_DIR}/external/build/opencv/aarch64-linux-gnu

Customization of cmake

Customize the “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu/aarch64_toolchain.cmake” file as needed.

For this tutorial, proceed without customization.

Makefile settings

Edit the second line of the “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu/Makefile“ file to match the downloaded version.

This tutorial sets opencv-4.7.0.

OPENCV_DIR = opencv-4.7.0

Also, customize the build options for the OpenCV module. You can see the options by searching for "-D" in the Makefile.

Enable only the options you really need.

If unnecessary options are included, the size of the OpenCV library will be larger than necessary and it will not be possible to include it in your application.

For this tutorial, proceed without customization.

Build and install OpenCV

Build OpenCV in the “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu“ directory.

$ make

Compiling OpenCV takes some time, so wait for a while.

Install OpenCV in the “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu“ directory.

$ make install

Administrator rights may be required. In that case, run sudo make install.

The library is created in a “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu/install“ directory.

Deployment in AdamApp

Deploy the OpenCV modules to use them with AdamApp.

Here we take “opencv_edge_detection_app” as an example.

Copy of library file

Execute the following command in the “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu” directory.

$ cp -a install/lib/libopencv_world.so* ../../../../src/adamapp/opencv_edge_detection_app/external/lib/aarch64-linux-gnu

When using a shared folder and copying using Windows Explorer, symbolic links may not be copied correctly. Copy it on Linux.

reference: https://dev-partner.i-pro.com/space/TPFAQ/582320143

Then, the directory structure will appear as follows.

${SDK_DIR}/src/adamapp/opencv_edge_detection_app/external/lib/aarch64-linux-gnu/libopencv_world.so
${SDK_DIR}/src/adamapp/opencv_edge_detection_app/external/lib/aarch64-linux-gnu/libopencv_world.so.4.7.0
${SDK_DIR}/src/adamapp/opencv_edge_detection_app/external/lib/aarch64-linux-gnu/libopencv_world.so.407

Copy of header file

Execute the following command in the “${SDK_DIR}/external/build/opencv/aarch64-linux-gnu” directory.

$ cp -r install/include/opencv4/opencv2 ../../../../src/adamapp/opencv_edge_detection_app/external/include

There is no change in the directory structure after copying.

Make sure the files are copied to the destination “${SDK_DIR}/src/adamapp/opencv_edge_detection_app/external/include/opencv2“ directory.

Build the sample application

Build the sample application "opencv_edge_detection_app" and install it on the camera (eg, it can be installed from the green frame in the image below).

See here★link★ for how to build.

Open the app screen (red frame button in the image below),

and if the following edge-detected image of the captured by the camera is displayed, it is successful.

C/C++モジュールをコンパイルする(Curl)


libcurlのソースコードをダウンロードする

公式サイトからlibcurlのソースコードをダウンロードします。

このチュートリアルでは、例として7.87.0を使用します。

ダウンロードするバージョンは、使用する機能に合わせて選択してください。

https://curl.se/download.html

ダウンロードしたソースコードを格納するディレクトリを作成します。

$ cd ${SDK_DIR}/external/build
$ mkdir curl
$ cd curl

ダウンロードしたソースコード(curl-7.87.0.tar.gz)を作成したcurlディレクトリにコピーした後、展開します。

$ cd ${SDK_DIR}/external/build/curl
$ cp [ダウンロードしたソースコード格納ディレクトリ]/curl-7.87.0.tar.gz ./
$ tar -zxvf curl-7.87.0.tar.gz
$ cd curl-7.87.0

Configureを実行する

${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリで実行します。

[--host]オプションは必ずつけてください。

そのほかのオプションは使用する機能に合わせて選択してください。

OpenSSLなしの場合

$ ./configure --host=aarch64-linux-gnu --without-ssl

OpenSSLありの場合

$ ./configure --host=aarch64-linux-gnu --with-ssl=[OPENSSL_DIR]

[OPENSSL_DIR]は任意のディレクトリ

このチュートリアルではOpenSSLなしの場合で実行します。

ビルドを実行する

${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリでcurlをビルドします。

$ make

アプリで使用する

ビルドしたライブラリやヘッダーファイルをアプリフォルダにコピーします。

このチュートリアルでは、サンプルアプリ「update_sample_app」を例にします。

ライブラリのコピー

${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリで下記コマンドを実行します。

$ cp -a lib/.libs/libcurl.so* ../../../../src/adamapp/update_sample_app/external/lib/aarch64-linux-gnu

共有フォルダなどを使用し、Windowsのエクスプローラーを使ってコピーすると、シンボリックリンクが正しくコピーされないことがありますので、Linux上でコピーしてください。

参考:https://dev-partner.i-pro.com/space/TPFAQ/582320143

コピー後のディレクトリ構成は以下のようになります。

${SDK_DIR}/src/adamapp/update_sample_app/external/lib/aarch64-linux-gnu/libcurl.so
${SDK_DIR}/src/adamapp/update_sample_app/external/lib/aarch64-linux-gnu/libcurl.so.4
${SDK_DIR}/src/adamapp/update_sample_app/external/lib/aarch64-linux-gnu/libcurl.so.4.8.0

ヘッダーファイルのコピー

${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリで下記コマンドを実行します。

$ cp -r include/curl ../../../../src/adamapp/update_sample_app/external/include

コピー後のディレクトリ構成は変化ありません。

コピー先ディレクトリ ${SDK_DIR}/src/adamapp/update_sample_app/external/include/curl にファイルがコピーされていることを確認してください。

サンプルアプリをビルドする

サンプルアプリ「update_sample_app」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。

ビルド方法はこちらを参照してください。

アプリ画面を開きます(下記画像の赤枠ボタン)。

下記のようなメッセージが表示されていれば成功です

{"r_appDataType":"0","r_appData":"CA=="}

C/C++モジュールをコンパイルする(SQLite)


SQLiteのソースコードをダウンロードする

公式サイトからSQLiteのソースコードをダウンロードします。

このチュートリアルでは、例として3.40.0を使用します。

ダウンロードするバージョンは、使用する機能に合わせて選択してください。

SQLite Home Page

https://www.sqlite.org/index.html

SQLite 3.40.0

https://www.sqlite.org/2022/sqlite-autoconf-3400000.tar.gz

ダウンロードしたソースコードを格納するディレクトリを作成します。

$ cd ${SDK_DIR}/external/build
$ mkdir sqlite
$ cd sqlite

ダウンロードしたソースコード(sqlite-autoconf-3400000.tar.gz)を作成したsqliteディレクトリにコピーした後、展開します。

$ cd ${SDK_DIR}/external/build/sqlite
$ cp [ダウンロードしたソースコード格納ディレクトリ]/sqlite-autoconf-3400000.tar.gz ./
$ tar -zxvf sqlite-autoconf-3400000.tar.gz
$ cd sqlite-autoconf-3400000.tar.gz

Configureを実行する

${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリで実行します。

[--host]オプションは必ずつけてください。

そのほかのオプションは使用する機能に合わせて選択してください。

$ ./configure --host=aarch64-linux-gnu

ビルドを実行する

${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリでSQLiteをビルドします。

$ make

アプリで使用する

ビルドしたライブラリやヘッダーファイルをアプリフォルダにコピーします。

このチュートリアルでは、サンプルアプリ「sqlite_app」を例にします。

ライブラリのコピー

${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリで下記コマンドを実行します。

$ cp -a .libs/libsqlite3.* ../../../../src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu

共有フォルダなどを使用し、Windowsのエクスプローラーを使ってコピーすると、シンボリックリンクが正しくコピーされないことがありますので、Linux上でコピーしてください。

参考:https://dev-partner.i-pro.com/space/TPFAQ/582320143

コピー後のディレクトリ構成は以下のようになります。

${SDK_DIR}/src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.a
${SDK_DIR}/src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.la
${SDK_DIR}/src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.lai
${SDK_DIR}/src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.so
${SDK_DIR}/src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.so.0
${SDK_DIR}/src/adamapp/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6

ヘッダーファイルのコピー

${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリで下記コマンドを実行します。

$ cp sqlite3.h ../../../../src/adamapp/sqlite_app/external/include

コピー後のディレクトリ構成は以下のようになります。

${SDK_DIR}/src/adamapp/sqlite_app/external/include/sqlite3.h

Makefileの修正

SQLiteの.soや.aファイルに合わせてMakefileを修正する必要があります。

このチュートリアルではSQLiteライブラリが「libsqlite3.so」「libsqlite3.a」のファイル名になっているので、このファイル名に合わせて修正することになります。

${SDK_DIR}/src/adamapp/sqlite_app/Makefile を下記の通り修正します。

修正前)ADD_LIBS+= sqlite


修正後)ADD_LIBS+= sqlite3

サンプルアプリをビルドする

サンプルアプリ「sqlite_app」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。

ビルド方法はこちらを参照してください。

アプリ画面を開きます(下記画像の赤枠ボタン)。

下記のような画面が表示されていれば成功です。

C/C++モジュールをコンパイルする(libjpeg)


Docker環境を構築する

Ubuntu(64-bit)環境でlibjpegを利用するためにDocker環境でコンパイルします。

こちらを参考にしてDocker環境を構築およびDockerイメージを作成してください。

libjpegのソースコードをダウンロードする

公式サイトからlibjpegのソースコードをダウンロードします。

このチュートリアルでは、例としてバージョン9eを使用します。

ダウンロードするバージョンは、使用する機能に合わせて選択してください。

libjpeg (version : 9e)

http://www.ijg.org/files/jpegsrc.v9e.tar.gz

ダウンロードしたファイルは、${SDK_DIR}/external/build/sample/docker/docker_volumeディレクトリに配置してください。

コンパイル手順ファイルを更新する

${SDK_DIR}/external/build/sample/docker/docker_volume/module_compile.shファイルに、コンパイル手順を記載します。

下記の内容をコピーしてください。

#!/bin/sh -x

HOME_PATH=/home/docker

LIBJPEG_ARCHIVES=jpegsrc.v9e.tar.gz
LIBJPEG_DIR=jpeg-9e

## for libjpeg
cd ${HOME_PATH}
tar zxf ${LIBJPEG_ARCHIVES}
cd ${LIBJPEG_DIR}
./configure
make

コンパイルする

Dockerを用いてsqliteモジュールとPythonモジュールをコンパイルします。

${SDK_DIR}/external/build/sample/docker ディレクトリでDockerを実行してください。

$ docker run --rm -it --name aarch64-ubuntu -v `pwd`/docker_volume:/home/docker compile/ubuntu-rel:0.1

${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9eにコンパイル済みモジュールが作成されます。

AdamAppに配置する

作成されたモジュールを、AdamAppで使用できるように配置します。

チュートリアルではsrc/adamapp/jpeg_appを例とします。

 

libjpegを配置する

libjpegライブラリは以下のディレクトリにインストールされています。

${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9e/.libs

libjpeg.so.9.5.0

上記ファイルを、AdamAppソースディレクトリにコピーしてください。

${SDK_DIR}/src/adamapp/jpeg_app/external/lib/aarch64-linux-gnu

$ cp -r ${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9e/.libs/libjpeg.so.9.5.0 ${SDK_DIR}/src/adamapp/jpeg_app/external/lib/aarch64-linux-gnu

コピー後のディレクトリ構成は以下のようになります。

${SDK_DIR}/src/adamapp/jpeg_app/external/lib/aarch64-linux-gnu/libjpeg.so.9.5.0

 

libjpegヘッダファイルは以下のディレクトリにインストールされています。

${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9e

jconfig.h

jmorecfg.h

jpeglib.h

上記3ファイルを、AdamAppソースディレクトリにコピーしてください。

${SDK_DIR}/src/adamapp/jpeg_app/external/include

$ cp -r ${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9e/jconfig.h ${SDK_DIR}/src/adamapp/jpeg_app/external/include
$ cp -r ${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9e/jmorecfg.h ${SDK_DIR}/src/adamapp/jpeg_app/external/include
$ cp -r ${SDK_DIR}/external/build/sample/docker/docker_volume/jpeg-9e/jpeglib.h ${SDK_DIR}/src/adamapp/jpeg_app/external/include

コピー後のディレクトリ構成は以下のようになります。

${SDK_DIR}/src/adamapp/jpeg_app/external/include/jconfig.h

${SDK_DIR}/src/adamapp/jpeg_app/external/include/jmorecfg.h

${SDK_DIR}/src/adamapp/jpeg_app/external/include/jpeglib.h

サンプルアプリをビルドする

サンプルアプリ「jpeg_app」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。

ビルド方法はこちらを参照してください。

アプリ画面を開いて(下記画像の赤枠ボタン)、カメラが撮影したjpeg画像が表示されていれば成功です。

チュートリアルは以上となります。

  • No labels