MATLAB MEX:-STD = C 11使用,但MEX错误仍然是错误



我正在使用Windows 10,并尝试生成Coco数据集Matlabapi的gasonmex.mexw64文件。

我使用的命令是mex -v COMPFLAGS="$COMPFLAGS -std=c++11 -Wall" -largeArrayDims gasonMex.cpp

我也尝试使用mex -v CXXFLAGS='$CXXFLAGS -std=c++11 -Wall' -largeArrayDims gasonMex.cpp,但有相同的错误。


Verbose mode is on.
... Looking for compiler 'MinGW64 Compiler (C++)' ...
... Looking for environment variable 'MW_MINGW64_LOC' ...Yes ('C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrset').
... Looking for file 'C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++.exe' ...Yes.
... Looking for folder 'C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrset' ...Yes.
Found installed compiler 'MinGW64 Compiler (C++)'.
Set PATH = C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbin; C:Program FilesMATLABR2016bexternincludewin64;C:Program FilesMATLABR2016bexterninclude; C:Program FilesMATLABR2016bsimulinkinclude;C:Program FilesMATLABR2016blibwin64;C:ProgramDataOracleJavajavapath;C:Program Files (x86)InteliCLS Client;C:Program FilesInteliCLS Client; C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0; C:Program Files (x86)IntelIntel(R) Management Engine ComponentsDAL; C:Program FilesIntelIntel(R) Management Engine ComponentsDAL;C:Program Files (x86)IntelIntel(R) Management Engine ComponentsIPT;C:Program FilesIntelIntel(R) Management Engine ComponentsIPT;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesIntelIntelSGXPSWbinx64Release;C:Program FilesIntelIntelSGXPSWbinwin32Release;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:Program Files (x86)Calibre2;C:Program FilesGitcmd;C:Program FilesMATLABR2016bbin;C:Program FilesMicrosoft SQL Server130ToolsBinn;C:Program FilesMicrosoft Windows Performance Toolkit;C:Python27;C:Python27scripts;C:Program Files (x86)SkypePhone;C:opencvbuildx86mingwbin;C:Program Files (x86)Windows Kits8.1Windows Performance Toolkit;C:Program FilesOpenNIBin64;D:Bin64;C:Program FilesIntelWiFibin;C:Program FilesCommon FilesIntelWirelessCommon;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0;C:UsersPriyankaAppDataLocalProgramsPythonPython35Scripts;C:UsersPriyankaAppDataLocalProgramsPythonPython35;C:UsersPriyankaAppDataLocalMicrosoftWindowsApps;C:Program FilesCMakebin;C:opencvbuildx64vc14bin;
Set INCLUDE = C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetinclude;C:Program Files (x86)Microsoft Visual Studio 10.0VCINCLUDE;C:Program FilesMicrosoft SDKsWindowsv7.1\INCLUDE;C:Program FilesMicrosoft SDKsWindowsv7.1\INCLUDEgl;C:Program FilesMATLABR2016bexterninclude;;
Set LIB = C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetlib;;C:Program Files (x86)Microsoft Visual Studio 10.0VCLibamd64;C:Program FilesMicrosoft SDKsWindowsv7.1\LibX64;C:Program Files (x86)Microsoft Visual Studio 10.0VCATLMFCLIBAMD64;C:Program FilesMATLABR2016blibwin64;C:Program FilesMATLABR2016bexternlibwin64;
Set MW_TARGET_ARCH = win64;win64;
Set LIBPATH = C:Program FilesMATLABR2016bexternlibwin64;C:Program Files (x86)Microsoft Visual Studio 10.0VCLibamd64;C:Program FilesMicrosoft SDKsWindowsv7.1\LIBX64;C:Program Files (x86)Microsoft Visual Studio 10.0VCATLMFCLIBAMD64;C:Program FilesMATLABR2016bexternlibwin64;

选项文件详细信息

Compiler location: C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrset
Options file: C:UsersPriyankaAppDataRoamingMathWorksMATLABR2016bmex_C++_win64.xml
CMDLINE2 : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++ -m64 -Wl,--no-undefined -shared -s -Wl,"C:Program FilesMATLABR2016b/extern/lib/win64/mingw64/exportsmexfileversion.def" C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188cpp_mexapi_version.obj   -L"C:Program FilesMATLABR2016bexternlibwin64mingw64" -llibmx -llibmex -llibmat -lm -llibmwlapack -llibmwblas -o gasonMex.mexw64
CXX : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++
COMPILER : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++
DEFINES : -m64 -DMATLAB_MEX_FILE 
MATLABMEX : -DMATLAB_MEX_FILE 
CXXFLAGS : -fexceptions -fno-omit-frame-pointer -std=c++11
INCLUDE : -I"C:Program FilesMATLABR2016b/extern/include" -I"C:Program FilesMATLABR2016b/simulink/include"
CXXOPTIMFLAGS : -O -DNDEBUG
CXXDEBUGFLAGS : -g
LDXX : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++
LINKER : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++
LDFLAGS : -m64 -Wl,--no-undefined
LDTYPE : -shared
LINKEXPORT : -Wl,"C:Program FilesMATLABR2016b/extern/lib/win64/mingw64/mexFunction.def"
LINKEXPORTVER : -Wl,"C:Program FilesMATLABR2016b/extern/lib/win64/mingw64/exportsmexfileversion.def"
LIBLOC : C:Program FilesMATLABR2016bexternlibwin64mingw64
LINKLIBS : -L"C:Program FilesMATLABR2016bexternlibwin64mingw64" -llibmx -llibmex -llibmat -lm -llibmwlapack -llibmwblas
LDOPTIMFLAGS : -s
LDDEBUGFLAGS : -g
OBJEXT : .obj
LDEXT : .mexw64
SETENV : set COMPILER=g++ 
            set COMPFLAGS=-c -fexceptions -fno-omit-frame-pointer -std=c++11 -m64 -DMATLAB_MEX_FILE  -DMATLAB_MEX_FILE  
            set OPTIMFLAGS=-O -DNDEBUG 
            set DEBUGFLAGS=-g 
            set LINKER=g++ 
            set LINKFLAGS=-m64 -Wl,--no-undefined -shared -L"C:Program FilesMATLABR2016bexternlibwin64mingw64" -llibmx -llibmex -llibmat -lm -llibmwlapack -llibmwblas -Wl,"C:Program FilesMATLABR2016b/extern/lib/win64/mingw64/mexFunction.def" 
            set LINKDEBUGFLAGS=-g
            set NAME_OUTPUT= -o "%OUTDIR%%MEX_NAME%%MEX_EXT%"
MINGWROOT : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrset
MATLABROOT : C:Program FilesMATLABR2016b
ARCH : win64
SRC : "D:MS Informatics5th Semestercocostuff-masterdownloadscocoApicocoapi-336d2a27c91e3c0663d2dcf0b13574674d30f88eMatlabAPIprivategasonMex.cpp";"C:Program FilesMATLABR2016bexternversioncpp_mexapi_version.cpp"
OBJ : C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj;C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188cpp_mexapi_version.obj
OBJS : C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188cpp_mexapi_version.obj 
SRCROOT : D:MS Informatics5th Semestercocostuff-masterdownloadscocoApicocoapi-336d2a27c91e3c0663d2dcf0b13574674d30f88eMatlabAPIprivategasonMex
DEF : C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.def
EXP : gasonMex.exp
LIB : gasonMex.lib
EXE : gasonMex.mexw64
ILK : gasonMex.ilk
MANIFEST : gasonMex.mexw64.manifest
TEMPNAME : gasonMex
EXEDIR : 
EXENAME : gasonMex
COMPFLAGS :  -std=c++11 -Wall
OPTIM : -O -DNDEBUG
LINKOPTIM : -s
CMDLINE1_0 : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++ -c -m64 -DMATLAB_MEX_FILE  -I"C:Program FilesMATLABR2016b/extern/include" -I"C:Program FilesMATLABR2016b/simulink/include" -fexceptions -fno-omit-frame-pointer -std=c++11 -O -DNDEBUG "D:MS Informatics5th Semestercocostuff-masterdownloadscocoApicocoapi-336d2a27c91e3c0663d2dcf0b13574674d30f88eMatlabAPIprivategasonMex.cpp" -o C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj
CMDLINE1_1 : C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++ -c -m64 -DMATLAB_MEX_FILE  -I"C:Program FilesMATLABR2016b/extern/include" -I"C:Program FilesMATLABR2016b/simulink/include" -fexceptions -fno-omit-frame-pointer -std=c++11 -O -DNDEBUG "C:Program FilesMATLABR2016bexternversioncpp_mexapi_version.cpp" -o C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188cpp_mexapi_version.obj

我收到的错误消息是


Building with 'MinGW64 Compiler (C++)'.
C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++ -c -m64 -DMATLAB_MEX_FILE  -I"C:Program FilesMATLABR2016b/extern/include" -I"C:Program FilesMATLABR2016b/simulink/include" -fexceptions -fno-omit-frame-pointer -std=c++11 -O -DNDEBUG "D:MS Informatics5th Semestercocostuff-masterdownloadscocoApicocoapi-336d2a27c91e3c0663d2dcf0b13574674d30f88eMatlabAPIprivategasonMex.cpp" -o C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj
C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++ -c -m64 -DMATLAB_MEX_FILE  -I"C:Program FilesMATLABR2016b/extern/include" -I"C:Program FilesMATLABR2016b/simulink/include" -fexceptions -fno-omit-frame-pointer -std=c++11 -O -DNDEBUG "C:Program FilesMATLABR2016bexternversioncpp_mexapi_version.cpp" -o C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188cpp_mexapi_version.obj
C:ProgramDataMATLABSupportPackagesR2016b3P.instrsetmingw_492.instrsetbing++ -m64 -Wl,--no-undefined -shared -s -Wl,"C:Program FilesMATLABR2016b/extern/lib/win64/mingw64/exportsmexfileversion.def" C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188cpp_mexapi_version.obj   -L"C:Program FilesMATLABR2016bexternlibwin64mingw64" -llibmx -llibmex -llibmat -lm -llibmwlapack -llibmwblas -o gasonMex.mexw64
Error using mex
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x1348): undefined reference to `jsonParse(char*, char**, JsonValue*, JsonAllocator&)'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x1353): undefined reference to `jsonStrError(int)'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x17af): undefined reference to `jsonParse(char*, char**, JsonValue*, JsonAllocator&)'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x17ba): undefined reference to `jsonStrError(int)'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x202c): undefined reference to `jsonParse(char*, char**, JsonValue*, JsonAllocator&)'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x2037): undefined reference to `jsonStrError(int)'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x2363): undefined reference to `JsonAllocator::deallocate()'
C:UsersPriyankaAppDataLocalTempmex_71745656324277_9188gasonMex.obj:gasonMex.cpp:(.text+0x240a): undefined reference to `JsonAllocator::deallocate()'
collect2.exe: error: ld returned 1 exit status

我的疑问类似于Matlab Mex:已经有-STD = C 11,但仍然有"编译器和库支持"的错误。但是我没有足够的声誉点在那里发表评论。

有人知道我在做什么错吗?还是面临类似问题?

您的错误消息指示链接器找不到符号。当它说error: ld returned 1 exit status时,链接器(ld)产生了错误,而不是编译器(g++)。

由于链接器无法找到其名称具有" JSON"的所有功能,所以我认为您缺少JSON库。

如果您知道期望链接到哪个库,则可以做:

mex <...> gasonMex.cpp -ljson

(假设json是库的名称(对libjson.alibjson.so评估)。还有一个-L参数可以指定目录在哪里查找库。或者,只需将带有完整路径的库名称传递给库mex命令:

mex <...> gasonMex.cpp dir/to/libjson.a

最新更新