c – 在OS X 10.9和MATLAB 2012a下使用Xcode 5.1的Mex文件

c – 在OS X 10.9和MATLAB 2012a下使用Xcode 5.1的Mex文件,第1张

概述我正在尝试为OpenCV(3.0.0)编译开发人员构建,但是我无法将我的系统配置为mex C文件.我试图遵循stackoverflow的建议,目前我可以使用mex c文件,但不能使用C文件.我所做的是编辑mexopts.sh以便使用正确的SDKROOT,我也将部署目标更改为10.9. 我的mexopts.sh看起来如下: #PATCH: MacOSX10.8 // updated manually 我正在尝试为OpenCV(3.0.0)编译开发人员构建,但是我无法将我的系统配置为mex C文件.我试图遵循stackoverflow的建议,目前我可以使用mex c文件,但不能使用C文件.我所做的是编辑mexopts.sh以便使用正确的SDKROOT,我也将部署目标更改为10.9.

我的mexopts.sh看起来如下:

#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'

只有在我将-std = c 11添加到CXXFLAGS之后,才能编译使用.cpp扩展名保存的简单C代码.这是我要编译的文件的代码

#include <math.h>#include <matrix.h>#include <mex.h>voID mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){  mexPrintf("Hello World!\n");}

我把它保存为test.c并编译.这是我得到的输出

mex test.c

在test.c中包含的文件中:2:
在/Applications/MATLAB_R2012a.app/extern/include/matrix.h:295中包含的文件中:
/Applications/MATLAB_R2012a.app/extern/include/tmwtypes.h:819:9:错误:未知类型
      名字’char16_t’
typedef char16_t CHAR16_T;
        ^
生成1个错误.

mex: compile of ' "test.c"' Failed.

使用mex时出错(第206行)
无法成功完成.

当文件在CXXFLAGS中保存为test.cpp而没有-std = c 11时,使用了相同的错误.我没有C/C++的经验但是我需要添加一些库或标志来解决问题吗?任何建议,链接都会有所帮助.

谢谢.

解决方法 当由于编译器限制或因为文件必须只是C而不可能是 use C++11 via CXXFLAGS时,这里有一些可能的解决方法,不涉及破解MATLAB安装(tmwtypes.h):

使用预处理器将char16_t定义为uint16_t的宏(在stdint.h中定义).在#include“mex.h”之前使用#define,或者只在命令行(mex或CFLAGS)上设置它:

-Dchar16_t=uint16_t

或者,在包含mex.h之前再添加一个typedef:

typedef uint16_t char16_t;

要获得uint16_t,您需要#include< stdint.h>.或者尝试UINT16_T(上限).

最后,如果使用C(编译.c文件),uchar.h可以定义一个char16_t宏,具体取决于编译器支持的C标准的修订版本:

/* In myMexfile.c */#include <uchar.h>
总结

以上是内存溢出为你收集整理的c – 在OS X 10.9和MATLAB 2012a下使用Xcode 5.1的Mex文件全部内容,希望文章能够帮你解决c – 在OS X 10.9和MATLAB 2012a下使用Xcode 5.1的Mex文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1215881.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存