【CentOS7】C++でReflection ~RTTRライブラリのインストール~
C++でReflectionがしたい。。。
そんな時にGithubでRTTRと言うライブラリを見つけました。
今回は試行錯誤してインストールした方法を書いてみたいと思います。
注意事項
このインストール方法は公式の方法ではありません。
試行錯誤したらやっとライブラリが使えるようになったので、同じ悩みを抱えている人の参考になるかと思い書いてます。
公式インストール手順は、ちゃんと下記に載ってます。
https://www.rttr.org/doc/master/building_install_page.html
今日のお話
開発言語
- c++11
環境
インストール方法
必要なパッケージをインストール
root
ユーザで実行
# yum install -y gcc-c++ # yum install -y epel-release # yum install -y —enablerepo=epel cmake3
RTTRライブラリのビルドとインストール
root
ユーザで実行
# wget https://www.rttr.org/releases/rttr-0.9.6-src.tar.gz # tar zxvf rttr-0.9.6-src.tar.gz # mkdir build # cd build/ # cmake3 -DCMAKE_BUILD_TYPE=Release ../rttr-0.9.6/ # make # make install # cp -rp install/lib64/librttr_core.so /usr/lib64/ # cp -rp install/lib64/librttr_core.so.0.9.6 /usr/lib64/
RTTRライブラリを使ったcppファイルを作成
main.cpp *1
#include <iostream> #include <rttr/registration> static void f() { std::cout << "Hello World" << std::endl; } using namespace rttr; RTTR_REGISTRATION { using namespace rttr; registration::method("f", &f); } int main() { type::invoke("f", {}); } // outputs: "Hello World"
RTTRライブラリを使ってアプリをビルド
○ビルドコマンド
$ g++ -std=c++11 main.cpp -I./install/include -lrttr_core
最終的に↓みたいなディレクトリ構成です!
/usr/lib64 #共有ライブラリ ┣librttr_core.so ┗ librttr_core.so.0.9.6 /home/vagrant ┣rttr-0.9.6/ ┗build/ ┣main.cpp #作ったcppファイル ┗install/ ┗include/ #ヘッダー
気付き
- 共有ライブラリパス
/usr/lib64
にライブラリを配置することでgccコマンドでライブラリのパス指定が不要になる。 - ライブラリの指定は、
-L
でできるらしい。※今回はコンパイルが上手くいかなかったのであえてファイルをcpしました。 - ライブラリ名は「libxxx.so」となっている必要があり、gcc側でパラメータを指定する時は、「-lxxx」となる。(
lib
,.so
は不要になる)
戯言
*1:サンプルコードの出典元( 1行目の #include だけ追加してます) https://www.rttr.org/doc/master/register_hello_world_page.html