Я могу создать пример программы testFeval. cpp и создайте исполняемый файл с помощью командной строки MatLab, как описано здесь. Как описано, я могу создать файл cpp с кодом их тестовой программы, а затем построить его из командной строки MatLab с помощью:
Код: Выделить всё
>> mex -setup -client engine C++
>> mex -v -client engine testFeval.cpp
Однако я хотел бы разработать C++ в VS Code, как описано здесь. Согласно этой странице, мне нужны эти библиотеки (где matlabroot = '/Applications/MATLAB_R2023a.app'):
- Библиотека движка —
Код: Выделить всё
matlabroot
Код: Выделить всё
/extern/bin/maci64/libMatlabEngine.dylib
- Библиотека массивов данных MATLAB —
Код: Выделить всё
matlabroot
Код: Выделить всё
/extern/bin/maci64/libMatlabDataArray.dylib
Код: Выделить всё
export DYLD_LIBRARY_PATH="/Applications/MATLAB_R2023a.app/extern/bin/maci64"
Я добавляю их в c_cpp_properties. json и Tasks.json, как предложено в других разделах SO.
Когда я запускаю файл C/C++, я вижу множество проблем. В основном отсутствуют файлы заголовков, но также есть некоторые проблемы со связью.
Например, VS Code не может найти libmwordfilt2.h. Но я могу подтвердить, что он находится в "/Applications". /MATLAB_R2023a.app/extern/include"
Все «отсутствующие» включения должны быть найдены с помощью путей, добавленных в «args» файла Tasks.json . Полный файл Tasks.json:
Код: Выделить всё
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: clang++ build active file",
"command": "/usr/bin/clang++",
"args": [
"-fcolor-diagnostics",
"-fansi-escape-codes",
"-I", // add directory to search paths, e.g., headers
"/Applications/MATLAB_R2023a.app/extern/include/**",
"/Applications/MATLAB_R2023a.app/extern/include",
"/Applications/MATLAB_R2023a.app/simulink/include",
"-L", // add directory to library search path
"/Applications/MATLAB_R2023a.app/extern/bin/maci64/libMatlabEngine.dylib",
"/Applications/MATLAB_R2023a.app/extern/bin/maci64/libMatlabDataArray.dylib",
"-g", // generate source-level debug info
"${file}",
// "-o", // write output to fileBasename (no extension)
// "${fileDirname}/${fileBasenameNoExtension}",
],
"options": {
"cwd": "${fileDirname}"
},
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger.",
"dependsOn":["build_lib"]
}
],
"version": "2.0.0"
}
Код: Выделить всё
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/Applications/MATLAB_R2023a.app/extern/include/**",
"/Applications/MATLAB_R2023a.app/extern/include",
"/Applications/MATLAB_R2023a.app/extern/bin/maci64"
],
"defines": [],
"macFrameworkPath": [
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang++",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "${default}"
}
],
"version": 4
}
Код: Выделить всё
>> mex -setup -client engine C++
ENGINE configured to use 'Xcode Clang++' for C++ language compilation.
>> mex -v -client engine testFeval.cpp
Verbose mode is on.
... Looking for compiler 'Xcode Clang++' ...
... Looking for environment variable 'DEVELOPER_DIR' ...No.
... Executing command 'xcode-select -print-path' ...Yes ('/Applications/Xcode.app/Contents/Developer').
... Looking for folder '/Applications/Xcode.app/Contents/Developer' ...Yes.
... Executing command 'which xcrun' ...Yes ('/usr/bin/xcrun').
... Looking for folder '/usr/bin' ...Yes.
... Executing command 'defaults read com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense' ...No.
... Executing command 'defaults read /Library/Preferences/com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense' ...Yes ('14.3.1').
... Executing command '
agreed=14.3.1
if echo $agreed | grep -E '[\.\"]' >/dev/null; then
lhs=`expr "$agreed" : '\([0-9]*\)[\.].*'`
rhs=`expr "$agreed" : '[0-9]*[\.]\(.*\)$'`
if echo $rhs | grep -E '[\."]' >/dev/null; then
rhs=`expr "$rhs" : '\([0-9]*\)[\.].*'`
fi
if [ $lhs -gt 4 ] || ( [ $lhs -eq 4 ] && [ $rhs -ge 3 ] ); then
echo $agreed
else
exit 1
fi
fi' ...Yes ('14.3.1').
... Executing command 'xcrun -sdk macosx --show-sdk-path' ...Yes ('/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk').
... Executing command 'xcrun -sdk macosx --show-sdk-version | awk 'BEGIN {FS="."} ; {print $1"."$2}'' ...Yes ('13.3').
... Executing command 'clang --version | grep -Eo '[0-9]+\.[0-9]+\.[0-9]'|head -1' ...Yes ('14.0.3').
Found installed compiler 'Xcode Clang++'.
Set INCLUDE = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/14.0.3/include;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include;/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/usr/include;/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/System/Library/Frameworks;
Options file details
-------------------------------------------------------------------
Compiler location: /Applications/Xcode.app/Contents/Developer
Options file: /Users/phillip_at_work/Library/Application Support/MathWorks/MATLAB/R2023a/ENGINE_C++_maci64.xml
CMDLINE100 : /usr/bin/xcrun -sdk macosx13.3 clang++ -c -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2023a.app/extern/include" -I"/Applications/MATLAB_R2023a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.15 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -fobjc-arc -std=c++14 -stdlib=libc++ -O2 -fwrapv -DNDEBUG "/Users/phillip_at_work/Projects/matlab_cpp_test_v2/testFeval.cpp" -o /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.o
CMDLINE200 : /usr/bin/xcrun -sdk macosx13.3 clang++ -Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.15 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -framework Cocoa -stdlib=libc++ -O /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.o -L"/Applications/MATLAB_R2023a.app/bin/maci64" -lmx -lmex -lmat -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine -leng -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine -o testFeval
CC : /usr/bin/xcrun -sdk macosx13.3 clang
CXX : /usr/bin/xcrun -sdk macosx13.3 clang++
DEFINES : -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -DMATLAB_MEX_FILE
MATLABMEX : -DMATLAB_MEX_FILE
MACOSX_DEPLOYMENT_TARGET : 10.15
CFLAGS : -fno-common -arch x86_64 -mmacosx-version-min=10.15 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk
CXXFLAGS : -fno-common -arch x86_64 -mmacosx-version-min=10.15 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -fobjc-arc -std=c++14 -stdlib=libc++
INCLUDE : -I"/Applications/MATLAB_R2023a.app/extern/include" -I"/Applications/MATLAB_R2023a.app/simulink/include"
CXXOPTIMFLAGS : -O2 -fwrapv -DNDEBUG
CXXDEBUGFLAGS : -g
LD : /usr/bin/xcrun -sdk macosx13.3 clang
LDXX : /usr/bin/xcrun -sdk macosx13.3 clang++
LDFLAGS : -Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.15 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -framework Cocoa -stdlib=libc++
LDBUNDLE :
LINKEXPORT :
LINKEXPORTVER :
LINKEXPORTCPP :
LINKLIBS : -L"/Applications/MATLAB_R2023a.app/bin/maci64" -lmx -lmex -lmat -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine -leng -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine
LDOPTIMFLAGS : -O
LDDEBUGFLAGS : -g
OBJEXT : .o
LDEXT :
SETENV : CC="/usr/bin/xcrun -sdk macosx13.3 clang"
CXX="/usr/bin/xcrun -sdk macosx13.3 clang++"
CFLAGS="-fno-common -arch x86_64 -mmacosx-version-min=10.15 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -DMATLAB_MEX_FILE "
CXXFLAGS="-fno-common -arch x86_64 -mmacosx-version-min=10.15 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -fobjc-arc -std=c++14 -stdlib=libc++ -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -DMATLAB_MEX_FILE "
COPTIMFLAGS="-O2 -fwrapv -DNDEBUG"
CXXOPTIMFLAGS="-O2 -fwrapv -DNDEBUG"
CDEBUGFLAGS="-g"
CXXDEBUGFLAGS="-g"
LD="/usr/bin/xcrun -sdk macosx13.3 clang"
LDXX="/usr/bin/xcrun -sdk macosx13.3 clang++"
LDFLAGS="-Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.15 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -framework Cocoa -stdlib=libc++ -L"/Applications/MATLAB_R2023a.app/bin/maci64" -lmx -lmex -lmat -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine -leng -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine "
LDDEBUGFLAGS="-g"
DEVELOPER_DIR_CHECK :
XCODE_DIR : /Applications/Xcode.app/Contents/Developer
XCRUN_DIR : /usr/bin
XCODE_AGREED_VERSION : 14.3.1
ISYSROOT : /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk
SDKVER : 13.3
CLANG_VERSION : 14.0.3
MATLABROOT : /Applications/MATLAB_R2023a.app
ARCH : maci64
SRC : "/Users/phillip_at_work/Projects/matlab_cpp_test_v2/testFeval.cpp"
OBJ : /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.o
OBJS : /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.o
SRCROOT : /Users/phillip_at_work/Projects/matlab_cpp_test_v2/testFeval
DEF : /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.def
EXP : "testFeval.exp"
LIB : "testFeval.lib"
EXE : testFeval
ILK : "testFeval.ilk"
MANIFEST : "testFeval.manifest"
TEMPNAME : testFeval
EXEDIR :
EXENAME : testFeval
OPTIM : -O2 -fwrapv -DNDEBUG
LINKOPTIM : -O
-------------------------------------------------------------------
Building with 'Xcode Clang++'.
/usr/bin/xcrun -sdk macosx13.3 clang++ -c -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2023a.app/extern/include" -I"/Applications/MATLAB_R2023a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.15 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -fobjc-arc -std=c++14 -stdlib=libc++ -O2 -fwrapv -DNDEBUG "/Users/phillipcurtsmith/Projects/matlab_cpp_test_v2/testFeval.cpp" -o /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.o
/usr/bin/xcrun -sdk macosx13.3 clang++ -Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.15 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -framework Cocoa -stdlib=libc++ -O /var/folders/c5/bhbgscv92tj3_x8y54q8rs8m0000gn/T/mex_67453097271459_5943/testFeval.o -L"/Applications/MATLAB_R2023a.app/bin/maci64" -lmx -lmex -lmat -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine -leng -L"/Applications/MATLAB_R2023a.app/extern/bin/maci64" -lMatlabDataArray -lMatlabEngine -o testFeval
MEX completed successfully.
Подробнее здесь: https://stackoverflow.com/questions/768 ... grams-libr