I try to generate a mex file for fmincon in combination with an objective in c++. My objective looks like: #include #include #include "obj.h" double obj(double x) { return x*x; } and the corresponding header file: double obj(double x); On MATLAB side I have writte a wrapper as desribed in the MATLAB docs: function y = callobj(x) %#codegen y = 0.0; if coder.target('MATLAB') % Executing in MATLAB, call MATLAB equivalent of % C function foo y = x*x; else % Executing in generated code, call C function foo coder.updateBuildInfo('addSourceFiles','obj.cpp'); coder.cinclude('obj.h'); y = coder.ceval('obj',coder.ref(x)); end end The objective is passed to the fmincon function in a matlab function: function x_result = opt_th(x0,lb,ub) options = optimoptions('fmincon','Algorithm','sqp'); x_result = fmincon(@callobj,x0,[],[],[],[],lb,ub,[],options); end The test script is defined as: x0 = -2; lb = -2.2; ub = 3.3; x_res = opt_th(x0,lb,ub); So thats the definition of the problem. If I run the Coder App I get an compiler error: [1/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th_data.c /Fobuild\win64\opt_th_data.obj opt_th_data.c [2/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex rt_nonfinite.c /Fobuild\win64\rt_nonfinite.obj rt_nonfinite.c [3/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex factorQRE.c /Fobuild\win64\factorQRE.obj factorQRE.c [4/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2\obj.cpp" /Fobuild\win64\obj.obj obj.cpp [5/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th_mexutil.c /Fobuild\win64\opt_th_mexutil.obj opt_th_mexutil.c [6/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th_initialize.c /Fobuild\win64\opt_th_initialize.obj opt_th_initialize.c [7/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex factorQR.c /Fobuild\win64\factorQR.obj factorQR.c [8/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex eml_int_forloop_overflow_check.c /Fobuild\win64\eml_int_forloop_overflow_check.obj eml_int_forloop_overflow_check.c [9/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex computeObjective_.c /Fobuild\win64\computeObjective_.obj FAILED: build/win64/computeObjective_.obj cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex computeObjective_.c /Fobuild\win64\computeObjective_.obj computeObjective_.c computeObjective_.c(18): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "ssq.h": No such file or directory [10/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th.c /Fobuild\win64\opt_th.obj opt_th.c [11/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex computeFiniteDifferences.c /Fobuild\win64\computeFiniteDifferences.obj computeFiniteDifferences.c [12/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex squareQ_appendCol.c /Fobuild\win64\squareQ_appendCol.obj squareQ_appendCol.c [13/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex xcopy.c /Fobuild\win64\xcopy.obj xcopy.c [14/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex fmincon.c /Fobuild\win64\fmincon.obj fmincon.c D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2\codegen\mex\opt_th\fmincon.c(159) : warning C4700: Die nicht initialisierte lokale Variable "FiniteDifferences" wurde verwendet. ninja: build stopped: subcommand failed.
Neeta Dsouza answered .
2025-11-20
Copying from my comment, as apparently it turned out to solve the entire problem:
double obj(double x)
The function expects a value, not a pointer to a value.
y = coder.ceval('obj',coder.ref(x));
You are passing a pointer to the value, not the value itself.
y = coder.ceval('obj', x); %just pass the value