gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:13:17 25 4
gpt4 key购买 nike

我正在尝试为 OpenCV (3.0.0) 编译开发人员版本,但是我无法将我的系统配置为 mex C 文件。我尝试遵循 stackoverflow 的建议,目前我可以混合 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中没有-std=c++11的文件保存为test.cpp时出现同样的错误。我没有使用 C/C++ 的经验,但是我需要添加一些库或标志来解决问题吗?任何建议,链接都会有所帮助。

谢谢。

最佳答案

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

使用预处理器定义char16_t作为 uint16_t 的宏(在 stdint.h 中定义)。要么使用 #define 之前 #include "mex.h" ,或者只是在命令行上设置它( mexCFLAGS ):

-Dchar16_t=uint16_t

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

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 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com