By default, the upgraded Clang doesn't set char16_t
, which is required by MATLAB.
Quick fix
This works for C or C++ code but needs to be done on each mex
command line.
>> mex -Dchar16_t=uint16_t ...
Other solutions below put this definition into the mex configuration or enable C++11.
Permanent solution
Options:
- Add
-std=c++11
to CXXFLAGS
in your mex configuration file AND compile .cpp files instead of .c. The mex config file is mexopts.sh (pre-R2014a) or the .xml file indicated by mex -setup
(R2014a+). This is what worked for OP, but the next option works too. Be sure to edit the active/installed config, not the system-wide reference. Try the next solution if you can't tell.
- Use a
#define
or typedef
to create char16_t
before including mex.h (see "other workaround" below).
- In some future version of MATLAB, this will have been fixed. Re-run
mex -setup
to have MATLAB reconfigure it for you and it works. As of R2014a, this doesn't do the trick.
- As a last resort, you can always modify the MATLAB installation, hacking MATLAB's tmwtypes.h as Dennis suggests, but I strongly suggest NOT modifying the MATLAB installation.
Note: If you are using C and cannot or don't want to change to C++, follow the solution in this other answer, OR see the alternative workaround below.
The other workaround
If for some reason you are not able to enable the C++11 standard, you can use the preprocessor to define char16_t
. Either put #define char16_t uint16_t
before #include "mex.h"
, or set it with the compiler command line:
-Dchar16_t=uint16_t
Alternatively, use a typedef
, again before including mex.h:
typedef uint16_t char16_t;
If these solutions don't work, try changing uint16_t
to UINT16_T
. Further yet, others have reported that simply including uchar.h brings in the type, but others don't have that header.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…