【CentOS7】C++でReflection ~RTTRライブラリのインストール~

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もわかりにくいよ!

*1:サンプルコードの出典元( 1行目の #include だけ追加してます) https://www.rttr.org/doc/master/register_hello_world_page.html