2013-07-17 107 views
4

我正在使用mex和C++重寫我的一些matlab代碼,以使其以更快的速度讀取大文件。我試圖編譯代碼並得到這個錯誤。我對mex是新手,並希望能夠幫助您發現代碼無法編譯的原因。提前致謝。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. 

回答

2

你有一個void mexFunction(int nout, mxArray* pout[], int nin, const mxArray* pin[]))read_svm.cpp文件中定義的?

Matlab期望您的mex文件在您的代碼中具有該簽名的功能。這是它執行mex文件時調用的函數。

+0

謝謝!我有一個函數接受了這些參數,但沒有將其命名爲mexFunction。一旦我改變了編譯的名字,沒有任何問題 – user2589787