2017年6月20日火曜日
atomでtexを自動更新する環境を作成(ubuntu,mint)
2017年4月20日木曜日
自作ライブラリをCMakeでディレクトリごとインストールする方法
自作ライブラリをCMakeでディレクトリごとインストールする方法
春先は送迎会などで諭吉が吹き飛んでいくのが悲しい限りです. ああ,諭吉よ.どうしてあなたは行ってしまったのですか. それはさておき, githubとかで自作ライブラリを公開するときに CMakeつかってビルドして/usr/local/lib/にインストールする方法を紹介しますね.
まず,今回はSonyの開発した人類の永遠の友であるPS3のコントローラーをlinuxで簡単に使用できるライブラリを作ったので,それをドヤ顔してgithubに公開してやろうかと思ったところ,opencvとかのように
sudo make install
とかやると, /usr/local/inculde/と /usr/local/lib/ にいい感じにインストールされる方法がわからなかったときのメモであぞよ.
というわけで,どうすればいいかお教えしましょう. まず,本日の生け贄... 本日のメインディッシュはdualshockという名前のライブラリとなっております.
構成
本日の構成は
dualshock|-CMakeLists.txt|-READEME.md|-example--testDs3.cpp|-include--dualshock--ds3.cpp|-src--ds3.cpp
となっております.というか,こんな感じのディレクトリ構成にしてください.多少は意味があります.
CMakeLists.txt
CMakeLists.txtは以下のように記述すること.
cmake_minimum_required(VERSION 3.5)project(dualshock)add_definitions("-std=c++11")set(SRC_DIR src)set(INCLUDE_DIR include/dualshock)include_directories(${INCLUDE_DIR})add_library(dualshock STATIC ${SRC_DIR}/ds3.cpp)target_link_libraries(dualshock pthread)install( TARGETS dualshockRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION lib)install(DIRECTORY include/dualshockDESTINATION /usr/local/include)
ポイント
この場合,ファイル構成は綺麗になるが,ヘッダーと実装ファイルの 関係をどのように定義するのかが問題となる.
コンパイル時と,インストール後に使用するときとでは, それらの関係が異なるのである.
具体的には,cppファイルでどのようにヘッダーをincludeするのかということである.
でも,よく考えると,ヘッダーのincludeはコンパイルの時にのみ必要になる.ということは,インストールするときさえ乗り切れば,あとは,どうとでもなる.ということ.よって,ds3.cppのinclude部分をちょっとかえる.
FROM
#include "ds3.hpp"
ライブラリ内のヘッダーを参照するようにincludeのパスを変更する.
TO
#include "../include/dualshock/ds3.hpp"
結果
これを実行すると /usr/local/include 以下に /dualshock/ds3.hpp
/usr/local/lib/ 以下に libdualshock.a
がインストールされる.
2017年3月23日木曜日
TUTの学内LANにVPNで接続する方法
george washington.vpn.***.**.**
2017年3月1日水曜日
YouCompleteMeをNeoVimでインストールしようとしたらハマった話.
$ pip3 install neovim
$ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:neovim-ppa/unstable $ sudo apt-get update
$ sudo apt-get install neovim
$ mkdir -p ~/.config/nvim
neovimではvimrcのかわりにinit.vimを使用するので~/.bashrcに
export XDG_CONFIG_HOME="$HOME/.config/nvim"
を書き込んでおく.書き込んだ後,source ~/.bashrcを実行するのもわすれずにここでポイント!!!!
vimrcのdein.vimで管理しているプラグインの中でdein.vimとYouConpleteMeのプラグイン以外のプラグインを全部コメントアウトする.これは非常に重要である.どれくらい重要かというと...ちょっと想像できません.ご了承ください.
vimrcの中身を~/.config/nvim/init.vimに書き写す.
そのあと,deinをインストール
$ mkdir -p ~/.vim/dein/repos/github.com/Shougo/dein.vim $ git clone https://github.com/Shougo/dein.vim.git ~/.vim/dein/repos/github.com/Shougo/dein.vim
そしてnvimをたちあげると,もしくは:call dein#install()すると
deinとyoucompeltemeがインストールされます.
あとは,YouCompleteMeをコンパイルするだけなので
$ cd .vim/dein.vim/repos/github.com/Valloric/YouCompleteMe/
とする.君のシステムにすでにあるclangを使わないように!
要求するバージョンはclang3.9以上なのだとある!
...最新(2017-03-01)じゃん.
これで,YouCompleteMeは復活し,私の威厳は保たれた.おしまい.
重要なところは,init.vimのなかのdeinとyoucompleteme以外のプラグインをコメントアウト
したことで,再インストールとか全消去とかは必要あるかどうかはわかりません.
コメントアウトだけで復活するかも知れません.
2017年1月19日木曜日
c++11でliboctave
C++11でliboctave
liboctaveとは
前々から,やってみたかったのだが,簡単に数値計算をc++でできるliboctaveを導入してみた.
ていうか,matlabってあるじゃん.あの,お値段がとてつもなく高い数値計算用ソフト.あのお値段では,叶姉妹ぐらいのファビュラスなお金持ちでないと使うことができないのでは無いだろうか.いや,そうに違いない.
しかし,私は,お金持ちではないので創意工夫でどうにかするしか無い.そこでliboctaveである.matlabのコードがそのまま動くと言われているくらいmatlabにそっくりなoctaveっていう数値解析ソフトが存在し,それはc++11で実装されている.したがって,octaveを構成しているライブラリをc++11の自分のプログラムから呼び出すことが可能なのである.
Let’s 数値計算
環境は以下のとおりである
- Ubuntu16.04(Linux mintの信者をやめたわけではない)
- Cmake
- LLVN Clang
さあ,パーティーの時間だ!!
$ sudo apt-get install octave liboctave-dev
$ sudo ldconfig
さあ,お片付けの時間だ!!
以下のようなテスト用のサンプルプログラムを用意します.
#include <iostream>
//#include </usr/local/include/octave-4.2.0/octave/config.h>
//octave-4.2.0ぐらいからはconfig.hはいらないらしい.コンパイラに怒られた.\(^o^)/
#include </usr/local/include/octave-4.2.0/octave/Matrix.h>
using namespace std;
int main(int argc, char**argv)
{
Matrix A(2,3), B(2,2,1.0);
ColumnVector x(3), y(2), z(2);
for(int r(0); r<2; ++r)
for(int c(0); c<3; ++c)
A(r,c) = r+c;
for(int r(0); r<3; ++r) x(r)=(r+1.0)*2.0;
for(int r(0); r<2; ++r) y(r)=(r+1.0)*r;
z = B*(A*x+y);
cout<<"A="<<endl;
cout<<A;
cout<<"B="<<endl;
cout<<B;
cout<<"x= "<<x.transpose()<<endl;
cout<<"y="<<y.transpose()<<endl;
cout<<"z="<<z.transpose()<<endl;
return 0;
}
コンパイルは以下の感じで
clang++ -std=c+=11 test.cpp -loctave
Cmakeを使うときは以下の感じで
cmake_minimum_required(VERSION 3.5)
project(test)
add_executable(test test.cpp)
target_link_libraries(test octave)
結果は以下な感じざんす
A=
0 1 2
1 2 3
B=
1 1
1 1
x= 2 4 6
y= 0 2
z= 46 46
なんと言うことでしょう.
あの憎きmatlabと同等の環境を手に入れてしまった.ふはは.
何と言う高揚感!
まあ,当然のごとく,こういったことには先人がいて,わたしはコピーしただけなんだけどね.
どんなことができるかはここを見る
2016年7月10日日曜日
YouCompleteMeでPython future のエラーが出て補完できない!
突然クラッシュしていうことにゃ
YouCompleteMe unavailable: This package should not be accessible on Python 3. Ei
ther you are trying to run from the python-future src folder or your installatio
n of python-future is corrupted.
あなたの元をわたしは去らねばならなくなりました.
わたしは,あなたのコーディングを手助けしてきましたが,とうとうお別れの時がきました.
今日のような日が訪れることは以前からわかっていました.あの,パイソン3がやってきたのです.
わたしはパイソン2.7やっていけますが,3とは相容れることができません.
おごれるものも久しからず,ただ春の夜の夢のごとし.さようなら.(意訳)
2016年4月15日金曜日
librealsenseをLinuxMintにインストール
Linux Mint 17の記事です.
Linux Mint 18にには適用できません.
realsenseをintelから購入しました.
そしたら,10日後に我が家に到着しました.
ちなみに,お届け先の住所のところで,県名をローマ字ではなく漢字で
登録してしまったところ,実際に届いた荷物の伝票のお届け先住所のところには
県名が書かれていませんでした.
intelの人,ごめんなさい.
realsense はr200 sr300と種類があり,
ここから購入できます.
さて,Linuxでrealsense r200を 使うためには,librealsenseという
オープンソースのライブラリが必要なため,今回はそれをインストールします.
さらに,ちなみに,pcl1.8(point cloud library)のAPIの中にrealsenseGrubberという
クラスを見つけた私は,嬉々として,かつ頑張ってpcl1.8をインストールしましたが
relsenseGrubberを使うためにはwindowsでしか動かないrealsenseSDKが
必要でした.オーマイガッ!
さて,このlibrealsenseですが.4月15日現在,公式の説明通りではうまく行かないことがわかったのでここに訂正版を載せておきます.
●ソースのダウンロード
$ sudo apt-get update && sudo apt-get upgrade$ cd ~/
$ mkdir build
$ cd build
$ git clone https://github.com/IntelRealSense/librealsense.git
●必要なものをインストール
$ sudo apt-get install libusb-1.0-0-dev●多少の設定変更

上の写真のようにアップデートマネージャの
ソースコードのチェックボックスを入れるの!
これは,公式の説明にはない.だた,やっとかないと失敗する.●引き続きインストール
$ scripts/install_glfw3.sh
●カーネルにパッチ当てたり,usbのルールを変更したり
ここからは,必ず,realsenseがあなたのPCに突き刺さっていないことを
確認してから行ってくださいね
$
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ $
sudo udevadm control --reload-rules && udevadm triggerここからlinuxカーネルのバージョンによって操作が異なるがmintは3.19.0-32なので,迷う必要がない,ああ,mintで良かったね!よね?!
$ ./scripts/patch-uvcvideo-ubuntu-mainline.shさて,ここから要注意,公式の説明通りではダメなとこ第二弾.スクリプトの中身を読めばわかることだけど,読まないと引っかかる.$ cd scripts$ ./scripts/install-r200-udev-fix.sh$ sudo modprobe uvcvideo$ sudo dmesg | tail -n 50ここでエラーが出ないようだったらいいかもしれないと公式の説明には書いてあったが,そんなこたぁー無い.
●コン・パイル
さあ,あとは,今までインストールしたものを使ってコンパイルするだけ.ゴールは目前!
あと,ここから,Qtをインストールするけど,Qtの公式サイトからインストールするほうがいいかもしれない.私は公式からインストールしました.信じるか信じないかは,アナタ次第.へっへっへ...
$ sudo apt-get install qtcreator$ sudo scripts/install_qt.shlibralsense.qtcreatorというディレクトリのなかのall.proをダブルクリックして,
ビルド(タブ) --> すべてクリーンビルド(タブ) --> qmakeの実行ビルド(左下) --> クリックものすごい警告がでるが,それは私の日頃の行いによるものなのかは不明.あとは,libralsense/bin/debagのなかにあるプログラムを実行して,カラー画像,左右の赤外線画像,depth画像が取れれば成功.
お疲れ様でした.