【Mac】qtbindingsをインストール中のエラー Undefined symbols for architecture x86_64:
クロスプラットフォームであり、複数の言語でGUIアプリケーションを開発したいと思い検索をしてみたところ、Qtというフレームワークを使用するとそれが実現できそうであるとわかった
そんなQtをrubyを使ってコーディングを行うためにgemを使って気軽にインストールする
まずはQt自体のインストール(Homebrew使ってます)
これでqt4とcmakeがインストールされる
brew install automoc4
次にRubyで使用するためにqtbindingsを導入
gem install qtbindings
しかしエラー
[ 83%] Building CXX object ruby/qtruby/src/CMakeFiles/qtruby4shared.dir/marshall_types.o Linking CXX shared library libqtruby4shared.dylib Undefined symbols for architecture x86_64: "_rb_float_new", referenced from: unsigned long primitive_to_ruby<float>(float) in handlers.o unsigned long primitive_to_ruby<double>(double) in handlers.o marshall_QListqreal(Marshall*) in handlers.o marshall_QVectorqreal(Marshall*) in handlers.o marshall_QPairqrealQColor(Marshall*) in handlers.o marshall_doubleR(Marshall*) in handlers.o "_rb_funcallv", referenced from: method_missing(int, unsigned long*, unsigned long) in Qt.o class_method_missing(int, unsigned long*, unsigned long) in Qt.o QtRuby::VirtualMethodCall::callMethod() in marshall_types.o funcall2_protect(unsigned long) in marshall_types.o QtRuby::InvokeSlot::invokeSlot() in marshall_types.o "_rb_gc_writebarrier_unprotect", referenced from: rb_obj_wb_unprotect(unsigned long, char const*, int) in marshall_types.o "_rb_str_cat_cstr", referenced from: _rb_str_catf in Qt.o marshall_QString(Marshall*) in handlers.o marshall_QByteArray(Marshall*) in handlers.o "_rb_str_new_static", referenced from: method_missing(int, unsigned long*, unsigned long) in Qt.o class_method_missing(int, unsigned long*, unsigned long) in Qt.o _prettyPrintMethod in Qt.o "_rb_sym2id", referenced from: method_missing(int, unsigned long*, unsigned long) in Qt.o class_method_missing(int, unsigned long*, unsigned long) in Qt.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
調べてみるとRubyをインストールする際に –enable-shared オプションが必要であるそうだ
rubyのライブラリをダイナミックリンクとして出力してくれるらしく、Qtではそのライブラリを使用しているのだろうか
自分はrbenvを使用しているのでrbenvでRubyをインストールし直すとこうなる(バージョンは2.2.0)
CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.0
もう一度gemコマンドを実行すると無事にqtrubyをインストールできた