C++でReflectionがしたい。。。
そんな時にGithubでRTTRと言うライブラリを見つけました。
今回は試行錯誤してインストールした方法を書いてみたいと思います。
github.com
注意事項
このインストール方法は公式の方法ではありません。
試行錯誤したらやっとライブラリが使えるようになったので、同じ悩みを抱えている人の参考になるかと思い書いてます。
公式インストール手順は、ちゃんと下記に載ってます。
https://www.rttr.org/doc/master/building_install_page.html
今日のお話
開発言語
環境
インストール方法
必要なパッケージをインストール
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ライブラリを使ってアプリをビルド
build
ディレクトリにmain.cppを作ってる想定です。
- gcc実行は
build
ディレクトリで実行します。
- ビルドは通常ユーザで実施です。
○ビルドコマンド
$ 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
は不要になる)
戯言
- cmakeについてもっと少し理解を深める必要があるなー。
- って言うか、c++のライブラリインストール難しいよ!
- あとgccもわかりにくいよ!