MEX コンパイル エラー: 不明な型名 'char16_t' 質問する

MEX コンパイル エラー: 不明な型名 'char16_t' 質問する

次のエラーのため、MATLAB MEX コードをコンパイルできません。

In file included from /Applications/MATLAB_R2013a.app/extern/include/mex.h:58:
In file included from /Applications/MATLAB_R2013a.app/extern/include/matrix.h:294:
/Applications/MATLAB_R2013a.app/extern/include/tmwtypes.h:819:9: error: unknown type name 'char16_t'
typedef char16_t CHAR16_T;

私の記憶している限り、私のマシンで変更された唯一の点は、Xcode がバージョン 5.1 (5B130a) に更新されたことです。

とりあえず、MATLAB で MEX コードをコンパイルするための修正方法はありますか?

[Apple LLVM バージョン 5.1 (clang-503.0.38) (LLVM 3.4svn ベース) を搭載した OS 10.9.2 で実行中]

ベストアンサー1

デフォルトでは、アップグレードされた Clang はchar16_tMATLAB に必要な を設定しません。

クイックフィックス

mexこれは C または C++ コードでは機能しますが、各コマンド ラインで実行する必要があります。

>> mex -Dchar16_t=uint16_t ...

以下の他の解決策では、この定義を mex 構成に配置するか、C++11 を有効にします。

恒久的な解決策

オプション:

  • -std=c++11mex 構成ファイルにを追加しCXXFLAGS、.c ではなく .cpp ファイルをコンパイルします。mex 構成ファイルは mexopts.sh (R2014a 以前) またはmex -setup(R2014a 以降) で示される .xml ファイルです。これは OP には有効でしたが、次のオプションも有効です。システム全体の参照ではなく、アクティブ/インストール済み構成を必ず編集してください。わからない場合は、次の解決策を試してください。
  • #definemex.h をインクルードする前に、またはを使用しtypedefて作成しますchar16_t(以下の「その他の回避策」を参照)。
  • MATLAB の将来のバージョンでは、この問題は修正される予定です。MATLAB を再mex -setup実行して再構成すると、問題なく動作します。R2014a の時点では、この方法ではうまくいきません。
  • 最後の手段として、Dennisが提案しているようにMATLABのtmwtypes.hをハッキングしてMATLABのインストールを変更することもできますが、私は強くないMATLAB インストールの変更。

注: Cを使用していてC++に変更できない場合、または変更したくない場合は、この他の答えまたは、以下の代替回避策を参照してください。


他の回避策

何らかの理由でC++11標準を有効にできない場合は、プリプロセッサを使用して を定義することができますchar16_t#define char16_t uint16_t 前に #include "mex.h"または、コンパイラのコマンドラインで設定します。

-Dchar16_t=uint16_t

あるいは、 をtypedef再度使用する。前にmex.h をインクルード:

typedef uint16_t char16_t;

これらの解決策が機能しない場合は、uint16_tに変更してみてくださいUINT16_T。さらに、uchar.h をインクルードするだけで型が取り込まれると報告した人もいますが、そのヘッダーがない人もいます。

おすすめ記事