Matlab Mex代码未编译

Posted

技术标签:

【中文标题】Matlab Mex代码未编译【英文标题】:Matlab Mex code not compiling 【发布时间】:2013-07-17 03:55:37 【问题描述】:

我正在使用 mex 和 C++ 重写我的一些 matlab 代码,以使其更快地读取大文件。我正在尝试编译代码并收到此错误。我是 mex 的新手,希望能在发现代码无法编译的原因方面提供一些帮助。提前致谢。

>> mex -v read_svm.cpp

**************************************************************************
  Warning: Neither -compatibleArrayDims nor -largeArrayDims is selected. 
           Using -compatibleArrayDims. In the future, MATLAB will require
           the use of -largeArrayDims and remove the -compatibleArrayDims
           option. For more information, see:
           http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html
**************************************************************************

-> mexopts.sh sourced from directory (DIR = $PREF_DIR)
   FILE = /Users/anb/.matlab/R2013a/mexopts.sh
----------------------------------------------------------------
->    MATLAB                = /Applications/MATLAB_R2013a.app
->    CC                    = xcrun  -sdk macosx10.7  clang
->    CC flags:
         CFLAGS             = -fno-common -arch x86_64 -isysroot         /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7    .sdk -mmacosx-version-min=10.7  -fexceptions
         CDEBUGFLAGS        = -g
         COPTIMFLAGS        = -O2 -DNDEBUG
         CLIBS              = -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -lstdc++
         arguments          =  -DMX_COMPAT_32
->    CXX                   = xcrun  -sdk macosx10.7  clang++
->    CXX flags:
         CXXFLAGS           = -fno-common -fexceptions -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7
         CXXDEBUGFLAGS      = -g
         CXXOPTIMFLAGS      = -O2 -DNDEBUG
         CXXLIBS            = -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -lstdc++
         arguments          =  -DMX_COMPAT_32
->    FC                    = gfortran
->    FC flags:
         FFLAGS             = -fexceptions -m64 -fbackslash
         FDEBUGFLAGS        = -g
         FOPTIMFLAGS        = -O
         FLIBS              = -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -L -lgfortran -L -lgfortranbegin
         arguments          =  -DMX_COMPAT_32
->    LD                    = xcrun -sdk macosx10.7 clang
->    Link flags:
         LDFLAGS            = -arch x86_64 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2013a.app/extern/lib/maci64/mexFunction.map
         LDDEBUGFLAGS       = -g
         LDOPTIMFLAGS       = -O
         LDEXTENSION        = .mexmaci64
         arguments          = 
->    LDCXX                 = 
->    Link flags:
         LDCXXFLAGS         = 
         LDCXXDEBUGFLAGS    = 
         LDCXXOPTIMFLAGS    = 
         LDCXXEXTENSION     = 
         arguments          = 
----------------------------------------------------------------

-> xcrun  -sdk macosx10.7  clang++ -c  -I/Applications/MATLAB_R2013a.app/extern/include -I/Applications/MATLAB_R2013a.app/simulink/include -DMATLAB_MEX_FILE -fno-common -fexceptions -arch x86_64 -isysroot     /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7  -DMX_COMPAT_32 -O2 -DNDEBUG  "read_svm.cpp"

-> xcrun -sdk macosx10.7 clang -O -arch x86_64 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2013a.app/extern/lib/maci64/mexFunction.map -o  "read_svm.mexmaci64"  read_svm.o  -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -lstdc++

Undefined symbols for architecture x86_64:
  "_mexFunction", referenced from:
     -exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

    mex: link of ' "read_svm.mexmaci64"' failed.

Error using mex (line 206)
Unable to complete successfully.

【问题讨论】:

【参考方案1】:

你有void mexFunction(int nout, mxArray* pout[], int nin, const mxArray* pin[]))吗 在read_svm.cpp 文件中定义?

Matlab 期望您的 mex 文件在您的代码中具有带有该签名的函数。这是当您执行 mex 文件时它会调用的函数。

【讨论】:

谢谢!我有一个接受这些参数的函数,但没有将其命名为 mexFunction。一旦我更改了名称,它就可以毫无问题地编译了

以上是关于Matlab Mex代码未编译的主要内容,如果未能解决你的问题,请参考以下文章

matlab 解决 错误使用 mex 未找到支持的编译器或 SDK

Matlab 2017a 无法识别编译器(使用 mex 时出错,未找到支持的编译器或 SDK)

Matlab mex 选项未更新

基于 Matlab C 的 Mex 文件,套接字未运行

如何通过 Eclipse 编码和编译 Matlab mex 文件?

[matlab][原创]安装mingw后调用C++进行mex加操作