usagi / virtual-keyboard-prototype-1

仮想キーボード試作1型
3 stars 0 forks source link

Raspberry Pi で etupirkaのビルドを試す #51

Closed usagi closed 10 years ago

usagi commented 10 years ago
  << cmake ..                                     
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 2.8.10 or higher is required.  You are running version 2.8.9

-- Configuring incomplete, errors occurred!

これはcmakeの最低バージョン設定の修正だけで問題ない。後でコミットする。

usagi commented 10 years ago
-- checking for one of the modules 'libglog'
CMake Error at /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:363 (message):
  None of the required 'libglog' found
Call Stack (most recent call first):
  CMakeLists.txt:126 (pkg_search_module)

-- sqlite3: /usr/local/bin/sqlite3
-- Configuring incomplete, errors occurred!
LH-RP1 /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
  << apt-get install libgoogle-glog-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ libgoogle-glog-dev が見つかりません
usagi commented 10 years ago

http://packages.debian.org/search?suite=all&section=all&arch=any&searchon=names&keywords=google-glog

usagi commented 10 years ago
wget http://ftp.jp.debian.org/debian/pool/main/g/google-glog/libgoogle-glog-dev_0.3.3-1_armhf.deb
wget http://ftp.jp.debian.org/debian/pool/main/g/google-glog/libgoogle-glog0_0.3.3-1_armhf.deb
sudo dpkg -i libgoogle-glog0_0.3.3-1_armhf.deb
sudo dpkg -i libgoogle-glog-dev_0.3.3-1_armhf.deb
apt-get install libgflags2

手順によっては最後にapt-get install -fが必要になります。

時間無いから説明あとでかく。

usagi commented 10 years ago

cmake完了を確認。

usagi commented 10 years ago
  << ninja   
[5/13] Building CXX object CMakeFiles/etupirka.dir/camera-capture.cxx.o

ビルドは時間がそれなりにかかる。10分かからないと思うけど、時間無いから結果はあとで。

usagi commented 10 years ago
  << ninja   
[7/13] Building CXX object CMakeFiles/etupirka.dir/etupirka.cxx.o
FAILED: /usr/bin/g++    -Wall -pedantic-errors -std=c++11  -I../../libWRP-SQLite3/include -I../../libWRP-key/include -I/usr/include/opencv -MMD -MT CMakeFiles/etupirka.dir/etupirka.cxx.o -MF "CMakeFiles/etupirka.dir/etupirka.cxx.o.d" -o CMakeFiles/etupirka.dir/etupirka.cxx.o -c ../../etupirka.cxx
../../etupirka.cxx: In member function ‘void arisin::etupirka::etupirka_t::run_main()’:
../../etupirka.cxx:190:11: error: ‘sleep_for’ is not a member of ‘boost::this_thread’
../../etupirka.cxx:190:11: note: suggested alternative:
In file included from ../../etupirka.hxx:3:0,
                 from ../../etupirka.cxx:1:
/usr/include/c++/4.7/thread:263:7: note:   ‘std::this_thread::sleep_for’
../../etupirka.cxx:190:78: error: ISO C++ forbids declaration of ‘type name’ with no type [-fpermissive]
../../etupirka.cxx:190:65: error: expected ‘>’
../../etupirka.cxx:190:65: error: expected ‘(’
../../etupirka.cxx:190:72: error: ‘boost::chrono’ has not been declared
../../etupirka.cxx:190:92: error: expected primary-expression before ‘>’ token
../../etupirka.cxx: In member function ‘void arisin::etupirka::etupirka_t::run_reciever()’:
../../etupirka.cxx:220:11: error: ‘sleep_for’ is not a member of ‘boost::this_thread’
../../etupirka.cxx:220:11: note: suggested alternative:
In file included from ../../etupirka.hxx:3:0,
                 from ../../etupirka.cxx:1:
/usr/include/c++/4.7/thread:263:7: note:   ‘std::this_thread::sleep_for’
../../etupirka.cxx:220:78: error: ISO C++ forbids declaration of ‘type name’ with no type [-fpermissive]
../../etupirka.cxx:220:65: error: expected ‘>’
../../etupirka.cxx:220:65: error: expected ‘(’
../../etupirka.cxx:220:72: error: ‘boost::chrono’ has not been declared
../../etupirka.cxx:220:92: error: expected primary-expression before ‘>’ token
[7/13] Building CXX object CMakeFiles/etupirka.dir/space-converter.cxx.o
ninja: build stopped: subcommand failed.

エラー内容はあとでみる。時間ない。

usagi commented 10 years ago

libglogの件:

raspbian-wheezyというかdebianのwheezyにはglogがまだ入ってない。そこで、現行のdebian-sidのlibglogのパッケージをwgetで直接拾ってきてdpkgコマンドで.debパッケージファイルを直接インストールしています。

usagi commented 10 years ago

↑↑のエラー、現在実機ないので仮想マシンで同様の環境を用意して確認する。

Boostのバージョンが古くて機能が無いのではなかろうか。

usagi commented 10 years ago

ninja-buildもsidから手抜きで入れる。たぶん大丈夫じゃろ、たぶん(厳密にはダメ、理由はwheezyまでARMv6ターゲットだけどsidはARMv7ターゲットだからバイナリー互換性は本当は無い可能性もある。)

http://packages.debian.org/sid/ninja-build

usagi commented 10 years ago

↑手抜きでsidから入れたのダメでした。

  Run Build Command:/usr/bin/ninja cmTryCompileExec2648433437

  Illegal instruction

  Generator: execution of make failed.  Make command was: /usr/bin/ninja
  cmTryCompileExec2648433437

apt purge ninja-buildして改めてninjaを手作業でビルドします。

git clone git://github.com/martine/ninja.git
cd ninja
apt-get install re2c
./bootstrap.py
install ninja /usr/local/bin
usagi commented 10 years ago

帰宅・w・ 実機環境で再開します。

usagi commented 10 years ago

boost-1.49じゃboost::this_thread::sleep_forが無い!

http://www.boost.org/doc/libs/1_49_0/doc/html/thread/thread_management.html#thread.thread_management.this_thread

どうしましょうね・・・。

usagi commented 10 years ago

提案

  1. GCC>=4.8 とか std::this_thread::sleep_forに対応したコンパイラーを使う
  2. Boost>=1.50.0 を入れる( boost::this_thread::sleep_for は boost-1.50 から使える http://www.boost.org/doc/libs/1_50_0/doc/html/thread/thread_management.html#thread.thread_management.this_thread
  3. それ以外でクロスプラットフォームな機能を使う。
usagi commented 10 years ago

提案4(採用案):

#include <boost/version.hpp>して#if BOOST_VERSION >= 105000でboostの1.50以上とそれ未満を切り分けて、未満の場合にはboost::this_thread::sleep()boost::posix_time::microseconds()を放り投げる。

usagi commented 10 years ago

ninja完了を確認

  << ninja    
[2/2] Linking CXX executable etupirka
  [build: virtual-keyboard.sqlite3] begin
    * source-dir: /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample
    * build-dir : /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++/CMakeFiles/etupirka.dir
    * target-dir: /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
    generate sqlite3 importable data: /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++/CMakeFiles/etupirka.dir/virtual-keyboard-data.csv
    create table: /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++/virtual-keyboard.sqlite3
    import data : /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++/virtual-keyboard.sqlite3
  build succeeded
usagi commented 10 years ago
  << ./etupirka --help
zsh: segmentation fault  ./etupirka --help

( ゚д゚)・・・

usagi commented 10 years ago
LH-RP1 /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
  << ./etupirka --help
zsh: segmentation fault  ./etupirka --help
LH-RP1 /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
  << ./etupirka       
zsh: segmentation fault  ./etupirka
LH-RP1 /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
  << ./etupirka -d    
zsh: segmentation fault  ./etupirka -d

手抜きで入れたdebian-cidのglogライブラリーが問題かもしれない。手抜きしないで入れてリビルドしてみる。

usagi commented 10 years ago

念の為、手抜きインストールしたdebian-cidのglogの削除方法も書いておきます。

LH-RP1 /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
  << dpkg -l | ack glog
ii  libgoogle-glog-dev                    0.3.3-1                                armhf        library that implements application-level logging.
ii  libgoogle-glog0                       0.3.3-1                                armhf        library that implements application-level logging.
LH-RP1 /home/usagi/repos/virtual-keyboard-prototype-1/integration-sample/build/g++
  << sudo dpkg --remove libgoogle-glog-dev libgoogle-glog0
(データベースを読み込んでいます ... 現在 105072 個のファイルとディレクトリがインストールされています。)
libgoogle-glog-dev を削除しています ...
libgoogle-glog0 を削除しています ...
usagi commented 10 years ago

念の為、google-glogの手作業インストール方法も書いておきます。

wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz
tar._ glog-0.3.3.tar.gz
cd glog-0.3.3
./configure
make
sudo make install
usagi commented 10 years ago

Raspberry Pi/Raspbian-wheezyにおけるetupirkaビルド所要時間を計測してみました。

cmake所要時間: 23.47 [sec] ninja所要時間: 14:55.95 [min:sec]

usagi commented 10 years ago

glogを手作業でビルドすると、

  << ./etupirka    
./etupirka: error while loading shared libraries: libglog.so.0: cannot open shared object file: No such file or directory

こうなったりするかもしれない。一時的にこの問題を解決するには、

LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ./etupirka

などと一時的に変数を定義して実行すれば良い。

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATHを.zshrc等に追記すればそのユーザーでは恒常的に解消される。

または、glogの./configureの際に./configure --prefix=/usrとしておけば/usr/localではなく/usrにインストールされる。wheezyではglogはシステム標準では提供されないのでそれでも問題になることは無いと思います。

usagi commented 10 years ago

(top|front).1.mp4でビデオファイル入力モードでデバッグビルドのetupirkaをraspbian(RPi:700MHz)で動作させてみたところ、

I0123 03:37:41.073082 29273 etupirka.cxx:14] time_delta [ns]14145530000

という結果。リリーズビルドしたらもうちょっとはマシになるかもしれないけど。

※14,145,530,000[ns] = 14,145[ms] = 14 [sec] = 0.0714 [FPS]

厳しいなー。

usagi commented 10 years ago

まあ、とりあえずはRPiで動作可能にはなったのでCloseします。