背景
Maya の Linux でのサポート OS は RHEL7(CentOS7)である.
RHEL7 のデフォルトコンパイラは 4.8 である.
C++11 + STL 関連で, gcc(clang)は ABI の変更を行った. gcc 5.0+(clang) からは新しい ABI が標準である.
Maya の XGen ライブラリ(or OpenMaya も?)は gcc4.8 でコンパイルされている
したがって新しめのコンパイラや, Ubuntu でコンパイルしようとすると, リンク時にシンボルが見つからないエラーがでる(mangle された symbol に B5cxx11
prefix がつく)
たとえば XgSplineAPI.h
の boundMeshId()
などでエラーがでます.
解決方法
-D_GLIBCXX_USE_CXX11_ABI=0
としてビルドします.
補足
ABI の変更により, std::string の動作が変わったため, std::string boundMeshId()
と std::string
を値渡し, 値返しでの型を含む関数がエラーになります.
OpenMaya の API は MString を使っているのと, 基本 char *
で文字列を扱っているため, OpenMaya 関連は問題なくリンクできる模様です(ただし正しく動作するかは不明)