C/C++用外部ライブラリをビルドする
はじめに
このチュートリアルでは、SDKのインストールディレクトリを${SDK_DIR}
として記載します。
外部ライブラリのビルドにつきましてはサポート対象外となっております。本章に記載の情報を参考に外部ライブラリをビルドしてください。問い合わせいただいてもサポートできかねますので予めご了承ください。
目次
- 1 はじめに
- 2 目次
- 3 概要
- 4 C/C++モジュールをコンパイルする(OpenCV)
- 4.1 コンパイル環境を準備する
- 4.2 OpenCVのソースコードをダウンロードする
- 4.3 cmakeの設定
- 4.4 Makefileの設定
- 4.5 ビルドを実行し、OpenCVをインストールする
- 4.6 アプリで使用する
- 4.6.1.1 ライブラリのコピー
- 4.6.1.2 ヘッダーファイルのコピー
- 4.6.2 不要なファイルを削除する
- 4.7 サンプルアプリをビルドする
- 5 C/C++モジュールをコンパイルする(Curl)
- 5.1 コンパイル環境を準備する
- 5.2 libcurlのソースコードをダウンロードする
- 5.3 Configureを実行する
- 5.3.1 OpenSSLなしの場合
- 5.3.2 OpenSSLありの場合
- 5.4 ビルドを実行する
- 5.5 アプリで使用する
- 5.5.1 ライブラリのコピー
- 5.5.2 ヘッダーファイルのコピー
- 5.6 サンプルアプリをビルドする
- 6 C/C++モジュールをコンパイルする(SQLite)
- 6.1 コンパイル環境を準備する
- 6.2 SQLiteのソースコードをダウンロードする
- 6.3 Configureを実行する
- 6.4 ビルドを実行する
- 6.5 アプリで使用する
- 6.5.1 ライブラリのコピー
- 6.5.2 ヘッダーファイルのコピー
- 6.5.3 Makefileの修正
- 6.6 サンプルアプリをビルドする
- 7 C/C++モジュールをコンパイルする(libjpeg)
- 7.1 Docker環境を構築する
- 7.2 libjpegのソースコードをダウンロードする
- 7.3 コンパイル手順ファイルを更新する
- 7.4 コンパイルする
- 7.5 AdamAppに配置する
- 7.5.1 libjpegを配置する
- 7.5.2 サンプルアプリをビルドする
概要
C/C++版のAdamAppで外部ライブラリを使用する場合は、C/C++モジュールのコンパイルが必要です。
本チュートリアルでは、C/C++用外部ライブラリをビルドするための環境構築~モジュールのコンパイルまでの手順を解説します。
チュートリアルで使用する外部ライブラリ
OpenCV 4.7.0
Curl 7.87.0
SQLite 3.40.0
libjpeg (version : 9e)
C/C++モジュールをコンパイルする(OpenCV)
チュートリアルとして、OpenCVのコンパイルを実施します。
OpenCVの詳細については公式サイトよりご確認ください。
コンパイル環境を準備する
OpenCVのビルドには「cmake」が必要ですので、インストールします。
$ sudo apt-get install cmake
「setup_env.sh」を使用して SDK を使用するようにビルド環境をセットアップします。
$ cd ${SDK_DIR}
$ source setup_env.sh ipro-ambaCV2X
ここでは「ipro-ambaCV2X
」を指定していますが、利用する環境にあわせて適宜変更ください。
OpenCVのソースコードをダウンロードする
公式サイトからOpenCVのソースコードをダウンロードします。
このチュートリアルでは、例として4.7.0のソース(opencv-4.7.0.zip)を使用します。
ダウンロードするバージョンは、使用する機能に合わせて選択してください。
OpenCVのビルドのため、サンプルのMakefileとcmakeファイルをSDKに同梱しています。
ダウンロードしたソースコード(opencv-4.7.0.zip)を下記のフォルダにコピーしてください。
${SDK_DIR}
/external/build/opencv/aarch64-linux-gnu
cmakeの設定
必要に応じて、${SDK_DIR}/external/build/opencv/aarch64-linux-gnu/aarch64_toolchain.cmakeファイルをカスタマイズします。
このチュートリアルでは、カスタマイズせず進めます。
Makefileの設定
${SDK_DIR}/external/build/opencv/aarch64-linux-gnu/Makefileファイルの2行目をダウンロードしたバージョンに合わせて編集します。
このチュートリアルでは、opencv-4.7.0 とします。
OPENCV_DIR = opencv-4.7.0
また、OpenCV モジュールのビルド オプションをカスタマイズします。
Makefile で「-D」を検索すると、オプションを確認できます。
本当に必要なオプションのみを有効にしてください。
不要なオプションが含まれると、OpenCV ライブラリのサイズが必要以上に大きくなり、アプリに搭載できなくなります。
このチュートリアルでは、カスタマイズせず進めます。
ビルドを実行し、OpenCVをインストールする
${SDK_DIR}/external/build/opencv/aarch64-linux-gnuディレクトリでOpenCVをビルドします。
${SDK_DIR}/external/build/opencv/aarch64-linux-gnuディレクトリでOpenCVをインストールします。
ライブラリは${SDK_DIR}/external/build/opencv/aarch64-linux-gnu/installディレクトリに作成されています。
アプリで使用する
ビルドしたOpenCVのライブラリやヘッダーファイルをアプリフォルダにコピーします。
このチュートリアルでは、サンプルアプリ「opencv_edge_detection_app」を例にします。
ライブラリのコピー
${SDK_DIR}/external/build/opencv/aarch64-linux-gnuディレクトリで下記コマンドを実行します。
コピー後のディレクトリ構成は以下のようになります。
ヘッダーファイルのコピー
${SDK_DIR}/external/build/opencv/aarch64-linux-gnuディレクトリで下記コマンドを実行します。
コピー後のディレクトリ構成は変化ありません。
コピー先ディレクトリ ${SDK_DIR}/src/adamapp/opencv_edge_detection_app/external/include/opencv2 にファイルがコピーされていることを確認してください。
不要なファイルを削除する
作成されたOpenCVライブラリには、ライブラリのデバッグに使用するための情報が含まれています。
アプリケーション実行時には使用しないため、容量削減のためデバッグ情報を削除することをお勧めします。
サンプルアプリをビルドする
サンプルアプリ「opencv_edge_detection_app」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。
ビルド方法は各SDKバージョンに応じて実施ください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
下記画像のような、カメラが撮影した映像のエッジ検出された画像が表示されていれば成功です
C/C++モジュールをコンパイルする(Curl)
コンパイル環境を準備する
「setup_env.sh」を使用して SDK を使用するようにビルド環境をセットアップします。
libcurlのソースコードをダウンロードする
公式サイトからlibcurlのソースコードをダウンロードします。
このチュートリアルでは、例として7.87.0を使用します。
ダウンロードするバージョンは、使用する機能に合わせて選択してください。
ダウンロードしたソースコードを格納するディレクトリを作成します。
ダウンロードしたソースコード(curl-7.87.0.tar.gz)を作成したcurlディレクトリにコピーした後、展開します。
Configureを実行する
${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリで実行します。
[--host]オプションは必ずつけてください。
そのほかのオプションは使用する機能に合わせて選択してください。
OpenSSLなしの場合
OpenSSLありの場合
[OPENSSL_DIR]
は任意のディレクトリ
このチュートリアルではOpenSSLなしの場合で実行します。
ビルドを実行する
${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリでcurlをビルドします。
アプリで使用する
ビルドしたライブラリやヘッダーファイルをアプリフォルダにコピーします。
このチュートリアルでは、サンプルアプリ「update_sample_app」を例にします。
ライブラリのコピー
${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリで下記コマンドを実行します。
コピー後のディレクトリ構成は以下のようになります。
ヘッダーファイルのコピー
${SDK_DIR}/external/build/curl/curl-7.87.0 ディレクトリで下記コマンドを実行します。
コピー後のディレクトリ構成は変化ありません。
コピー先ディレクトリ ${SDK_DIR}/src/adamapp/update_sample_app/external/include/curl にファイルがコピーされていることを確認してください。
サンプルアプリをビルドする
サンプルアプリ「update_sample_app」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。
ビルド方法は各SDKバージョンに応じて実施ください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
下記のようなメッセージが表示されていれば成功です
{"r_appDataType":"0","r_appData":"CA=="}
C/C++モジュールをコンパイルする(SQLite)
コンパイル環境を準備する
「setup_env.sh」を使用して SDK を使用するようにビルド環境をセットアップします。
SQLiteのソースコードをダウンロードする
公式サイトからSQLiteのソースコードをダウンロードします。
このチュートリアルでは、例として3.40.0を使用します。
ダウンロードするバージョンは、使用する機能に合わせて選択してください。
SQLite Home Page
https://www.sqlite.org/index.html
SQLite 3.40.0
ダウンロードしたソースコードを格納するディレクトリを作成します。
ダウンロードしたソースコード(sqlite-autoconf-3400000.tar.gz)を作成したsqliteディレクトリにコピーした後、展開します。
Configureを実行する
${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリで実行します。
[--host]オプションは必ずつけてください。
そのほかのオプションは使用する機能に合わせて選択してください。
ビルドを実行する
${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリでSQLiteをビルドします。
アプリで使用する
ビルドしたライブラリやヘッダーファイルをアプリフォルダにコピーします。
このチュートリアルでは、サンプルアプリ「sqlite_app」を例にします。
ライブラリのコピー
${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリで下記コマンドを実行します。
コピー後のディレクトリ構成は以下のようになります。
ヘッダーファイルのコピー
${SDK_DIR}/external/build/sqlite/sqlite-autoconf-3400000 ディレクトリで下記コマンドを実行します。
コピー後のディレクトリ構成は以下のようになります。
Makefileの修正
SQLiteの.soや.aファイルに合わせてMakefileを修正する必要があります。
このチュートリアルではSQLiteライブラリが「libsqlite3.so」「libsqlite3.a」のファイル名になっているので、このファイル名に合わせて修正することになります。
${SDK_DIR}/src/adamapp/sqlite_app/Makefile を下記の通り修正します。
修正前)ADD_LIBS+= sqlite
↓
修正後)ADD_LIBS+= sqlite3
サンプルアプリをビルドする
サンプルアプリをビルドする前に、下記の画面にてSDカードをフォーマットします。(フォーマットしてよいSDカードか事前に確認ください、SDカードのデータは全て消去されます。)
フォーマットが完了したら、SDカードをext(ext4)フォーマットにしてSetボタンを押下します。
サンプルアプリ「sqlite_app」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。
ビルド方法は各SDKバージョンに応じて実施ください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
下記のような画面が表示されていれば成功です。
C/C++モジュールをコンパイルする(libjpeg)
Docker環境を構築する
Ubuntu(64-bit)環境でlibjpegを利用するためにDocker環境でコンパイルします。
こちらを参考にしてDocker環境を構築およびDockerイメージを作成してください。
libjpegのソースコードをダウンロードする
公式サイトからlibjpegのソースコードをダウンロードします。
このチュートリアルでは、例としてバージョン9eを使用します。
ダウンロードするバージョンは、使用する機能に合わせて選択してください。
libjpeg (version : 9e)
ダウンロードしたファイルは、${SDK_DIR}/external/build/sample/docker/docker_volumeディレクトリに配置してください。
コンパイル手順ファイルを更新する
${SDK_DIR}/external/build/sample/docker/docker_volume/module_compile.shファイルに、コンパイル手順を記載します。
下記の内容をコピーしてください。
コンパイルする
Dockerを用いてlibjpegモジュールをコンパイルします。
${SDK_DIR}/external/build/sample/docker ディレクトリでDockerを実行してください。
${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
コピーしたら、シンボリックリンクを作成してください。
コピーおよびシンボリックリンク作成後のディレクトリ構成は以下のようになります。
${SDK_DIR}/src/adamapp/jpeg_app/external/lib/aarch64-linux-gnu/libjpeg.so.9.5.0
${SDK_DIR}/src/adamapp/jpeg_app/external/lib/aarch64-linux-gnu/libjpeg.so.9
${SDK_DIR}/src/adamapp/jpeg_app/external/lib/aarch64-linux-gnu/libjpeg.so
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
コピー後のディレクトリ構成は以下のようになります。
${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」をビルドして、カメラにインストールします(例:下記画像の緑枠からインストール可能)。
ビルド方法は各SDKバージョンに応じて実施ください。
アプリ画面を開いて(下記画像の赤枠ボタン)、カメラが撮影したjpeg画像が表示されていれば成功です。
チュートリアルは以上となります。