2. インストール手順¶
ここでは、NEC BaaS Embedded SDK をインストールする手順について説明します。
2.1. 手順概要¶
Embedded SDK を利用する場合、1) ターゲットデバイス上で直接コンパイルする、2) 別のホストでクロスコンパイルする、の2通りの方法があります。
方法 1) を利用する場合は、ターゲットデバイスの OS 上にコンパイラなどのツールをインストールし、 Embedded SDK のソースを展開してビルドしてヘッダとライブラリをターゲットOS上にインストールします。 アプリケーションもターゲットデバイス上でビルドする形になります。
方法 2) を利用する場合は、ホストマシン上にクロスコンパイラを導入しておき、 Embedded SDK のソースをクロスコンパイルし、ライブラリをクロスコンパイル環境とターゲットOS上にインストールします。 アプリケーションはターゲット上で直接コンパイルするか、ホストマシン上でクロスコンパイルすることになります。
2.2. 事前準備¶
Embedded SDK のビルドを行うため、いくつかコンポーネントをインストールします。
ターゲットデバイスには以下のコンポーネントをインストールしてください。
- libcurl-devel 7.19以降
ターゲットデバイス上で直接コンパイルする場合は、以下のコンポーネントもターゲットにインストールしてください。
- gcc/g++ 4.7 以降 (C++11をサポートすること)
- CMake 3.1 以降
サブモジュールの取得 の章にある依存ライブラリの取得を行う必要があるため、以下も合わせてインストールしてください。 ライブラリ取得済みの環境一式をコピーして使用する場合は不要です。
- git 1.8以降
CentOS を使用している場合は、yumを使用してインストールすることができます。 その他のOSでは apt などのパッケージ管理システムを使用して同様に必要なツールを取得して下さい。
$ sudo yum install gcc gcc-c++
$ sudo yum --enablerepo=epel install cmake3
$ sudo yum install libcurl-devel
$ sudo yum install git
注釈
リポジトリに登録されているgccのバージョンが古い場合、以下の手順で更新してください。
$ gcc -version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
$ cd /etc/yum.repos.d
$ sudo wget http://people.centos.org/tru/devtools-2/devtools-2.repo
$ sudo yum install devtoolset-2-gcc
$ sudo yum install devtoolset-2-binutils
$ sudo yum install devtoolset-2-gcc-c++
# 以下コマンドで更新したgccを使用するようになります。
# ログアウト後は以前のgccを参照するため、必要に応じて~/.bash_profile などに追記してください。
$ scl enable devtoolset-2 bash
$ gcc -version
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
2.3. NEC BaaS Embedded SDK ソースコードの取得¶
GitHub の baas-sdk-embedded リポジトリから NEC BaaS Embedded SDK のソースコードを取得してください。
$ git clone https://github.com/nec-baas/baas-sdk-embedded.git
SDK ソースコード配布物は、以下のフォルダで構成されています。 使用する環境下でビルドし、生成したライブラリをプロジェクトに組み込みます。
doc/ - ドキュメント生成用の設定ファイル
functional_test/ - 機能試験コード
libs/ - 依存ライブラリのサブモジュール
src/ - SDKのコード
unit_tests/ - 単体試験コード
CMakeLists.txt - CMake用のビルド用設定ファイル
README.md - 配布物の説明、ビルド手順
警告
ソースコード提供のため、コードの改変、サポート外のプラットフォームでも動作可能ですが、サポート対象外となりますのでご注意ください。
2.4. サブモジュールの取得¶
NEC BaaS Embedded SDKは以下のOSSライブラリを使用します。
NEC BaaS Embedded SDKでは、前述の依存ライブラリをgit submoduleとして管理しています。 ビルドの前に、サブモジュールの取得を行います。
$ git submodule update
ホストで事前にsubmoduleを取得し、ターゲットにリポジトリをコピーしても問題ありません。
2.5. ライブラリの生成: ターゲットデバイス上で直接コンパイルする場合¶
プロジェクトフォルダにビルド用のディレクトリを作成し、移動します。
$ mkdir build
$ cd build
その後cmakeを使用してMakefileを生成します。 対象のCMakeLists.txtは親ディレクトリのファイルを指定します。 この時、-DCMAKE_BUILD_TYPE=Debug または Releaseを指定することで、デバッグ用/リリース用のライブラリを切り替えることができます。 またIntel 32bitプロセッサ環境を使用する場合は、-DIA32オプションを追加します。
$ cmake3 -DCMAKE_BUILD_TYPE=Debug ../
CMakeでライブラリや環境のチェックが行われます。 エラーが発生した場合はメッセージの内容に従い、apt-get,yum等で必要なリソースをインストールしてから、再度コマンドを実行してください。
成功した場合、カレントディレクトリにMakefileが生成されますので、以下コマンドでビルドします。 jオプションはコンパイルする環境に応じて調整してください。
またinstallには管理者権限が必要です。
$ make -j4
$ sudo make install
2.5.1. インストール先ディレクトリ¶
デフォルトのインストール先ディレクトリを記載します。 詳細はinstall時のログのファイル一覧を参照ください。
これらのヘッダファイルのインクルード、ライブラリのリンクを行い、NEC BaaS Embedded SDKを使用したアプリケーションの開発を行います。
NEC Baas Embedded SDK関連ヘッダ
/usr/local/include/necbaas/
cURLpp 関連ヘッダ
/usr/local/include/utilspp/
/usr/local/include/curlpp/
JsonCpp関連ヘッダ
/usr/local/include/json/
NEC Baas Embedded SDKライブラリ
/usr/local/lib/libembeddedsdk.so
cURLppライブラリ
/usr/local/lib/libcurlpp.so
/usr/local/lib/static/libcurlpp_static.a
JsonCppライブラリ
/usr/local/lib/libjsoncpp.a
2.6. ライブラリの生成: Raspberry Pi向けクロスコンパイルの場合¶
Raspberry Pi向けのクロスコンパイル手順を記載します。
2.6.1. ツールチェーンの取得¶
クロスコンパイル用の ツールチェーン を取得します。
ここでは$HOME/raspberrypi にcloneを行います。
$ mkdir $HOME/raspberrypi
$ cd $HOME/raspberrypi
$ git clone https://github.com/raspberrypi/tools.git
2.6.2. Raspberry Pi のルートファイルシステムのコピー¶
依存ライブラリやヘッダファイルを参照するために、raspberrypi本体から /lib/usr をコピーします。 ツールチェーンの中にも sysroot が用意されていますが、libcurl等のライブラリが含まれないためファイルコピーを行います。
なお、事前準備に記載したとおり、libcurl-devel などのライブラリは事前にターゲット上にインストールしておく必要があります。
$ rsync -rl --delete-after --safe-links pi@[ip_addr]:/{lib,usr} $HOME/raspberrypi/rootfs
注釈
ip_addr: pi@[ip_addr] の部分は、raspberrypi側の設定に合わせます。
2.6.3. クロスコンパイル用cmakeファイルの編集¶
ツールチェーンのインストールディレクトリ、rootfsの展開先に合わせてSDKビルド環境の cross/raspberrypi/pi.cmake を編集します。上記手順の通りであれば修正は不要です。
set(RASPBERRYPI_ROOT $ENV{HOME}/raspberrypi)
set(RASPBERRYPI_TOOLCHAIN ${RASPBERRYPI_ROOT}/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf)
2.6.4. ビルド実行¶
cmake実行時にクロスコンパイル用cmakeファイルを指定します。以下の定義を追加して実行します。
-DCMAKE_TOOLCHAIN_FILE=[SDKビルド環境]/cross/raspberrypi/pi.cmake
実行例
cmake3 -DCMAKE_TOOLCHAIN_FILE=../cross/raspberrypi/pi.cmake -DCMAKE_INSTALL_PREFIX=out ../
成功するとMakefileが生成されます。 ネイティブ環境と同様にmakeを実行し、ライブラリを生成します。
$ make -j4
$ make install
CMAKE_INSTALL_PREFIXに指定したディレクトリにRaspberry Pi用のライブラリが生成されます。 これらを対象の端末にコピーして使用します。
/usr/local/lib等のシステムディレクトリ、もしくは環境変数LD_LIBRARY_PATHに含まれるディレクトリにコピーすると、通常のライブラリと同様に参照が可能となります。