Fichiers Mex utilisant Xcode 5.1 sous OS X 10.9 avec MATLAB 2012a

J’essaie de comstackr la version de développeur pour OpenCV (3.0.0), mais je ne peux pas configurer mon système pour les fichiers mex C. J’ai essayé de suivre les suggestions de stackoverflow et je peux actuellement utiliser les fichiers mex c ++, mais pas les fichiers C. Ce que j’ai fait, c’est modifier mexopts.sh pour mexopts.sh le correct SDKROOT et modifier les cibles de déploiement en 10.9 .

Mon mexopts.sh ressemble à ceci:

  #PATCH: MacOSX10.8 // updated manually to 10.9 CC='llvm-gcc' CXX='llvm-g++' SDKROOT='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/' #SDKROOT='/' MACOSX_DEPLOYMENT_TARGET='10.9' ARCHS='x86_64' # StorageVersion: 1.0 # CkeyName: GNU C # CkeyManufacturer: GNU # CkeyLanguage: C # CkeyVersion: CFLAGS="-fno-common -no-cpp-precomp -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" CFLAGS="$CFLAGS -fexceptions" CLIBS="$MLIBS" COPTIMFLAGS='-O2 -DNDEBUG' CDEBUGFLAGS='-g' CLIBS="$CLIBS -lstdc++" # C++keyName: GNU C++ # C++keyManufacturer: GNU # C++keyLanguage: C++ # C++keyVersion: # OLD #CXXFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" # NEW CXXFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -std=c++11" CXXLIBS="$MLIBS -lstdc++" CXXOPTIMFLAGS='-O2 -DNDEBUG' CXXDEBUGFLAGS='-g' 

Ce n’est qu’après avoir ajouté -std=c++11 à CXXFLAGS j’ai pu comstackr du code C ++ simple, enregistré avec l’extension .cpp . Voici le code du fichier que je veux comstackr

 #include  #include  #include  void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mexPrintf("Hello World!\n"); } 

Je l’enregistre en tant que test.c et comstack. Voici la sortie que je reçois

 mex test.c 

Dans le fichier inclus à partir de test.c: 2: Dans le fichier compris dans /Applications/MATLAB_R2012a.app/extern/include/masortingx.h:295: /Applications/MATLAB_R2012a.app/extern/include/tmwtypes.h:819:9: erreur: nom de type inconnu ‘char16_t’ typedef char16_t CHAR16_T; ^ 1 erreur générée.

 mex: comstack of ' "test.c"' failed. 

Erreur lors de l’utilisation de mex (ligne 206) Impossible de terminer avec succès.

La même erreur a été utilisée lorsque le fichier a été enregistré en tant que test.cpp sans -std=c++11 dans CXXFLAGS . Je n’ai pas d’expérience en C / C ++, mais y a-t-il une bibliothèque ou un drapeau à append pour résoudre le problème? Toutes les suggestions, les liens seraient utiles.

Je vous remercie.

Lorsqu’il n’est pas possible d’ utiliser C ++ 11 via CXXFLAGS , soit en raison d’une limitation du compilateur, soit du fait que le fichier doit être en C uniquement, voici quelques solutions de contournement qui n’impliquent pas de piratage de l’installation MATLAB (tmwtypes.h):

Utilisez le pré-processeur pour définir char16_t tant que macro pour uint16_t (défini dans stdint.h). Utilisez soit #define avant #include "mex.h" , ou simplement le définir sur la ligne de commande ( mex ou CFLAGS ):

 -Dchar16_t=uint16_t 

Vous pouvez également append un typedef , avant d’inclure mex.h:

 typedef uint16_t char16_t; 

Pour obtenir uint16_t , vous devez #include . Ou essayez UINT16_T (majuscules).

Enfin, si vous utilisez C (fichier de compilation .c ), uchar.h peut définir une macro char16_t , en fonction de la révision de la norme C prise en charge par votre compilateur:

 /* In myMexFile.c */ #include