MATLAB: Error with codegen/mex (error status code 2)

ccodegencompilermatlab codermex

Hi, I am trying to compile code that I know has compiled successfully on another computer. I am running Matlab 2014b on Ubuntu 12.04. Any ideas on how to fix this?
I am running the following code:
t = coder.typeof(0, [1e6 3],1);
C = coder.typeof(0, [1e6 3],1);
vt = coder.typeof(0, [1e6 3],1);
R = coder.typeof(0, [1e6 9],1);
EV = coder.typeof(0, [1e6 3 3],1);
codegen CalRigidEnergy3d -args { EV,t,vt,C,R }
This refers to the file CalRigidEnergy3d:
function E=CalRigidEnergy3d(EV,t,U,C,R)
E=0;
Eij = zeros(3,1);
for i=1:size(t,1)
rot=reshape(R(i,:),[3 3]);
for j=0:2
j1=j+1;
j2=mod(j+1,3)+1;
j3=mod(j+2,3)+1;
idx2=t(i,j2);
idx3=t(i,j3);
Uij=U(idx3,:)-U(idx2,:);
Eij(1,1)=EV(i,j1,1);
Eij(2,1)=EV(i,j1,2);
Eij(3,1)=EV(i,j1,3);
E=E+C(i,j1)*norm(Uij'-rot*Eij)^2;
end
end
Running mex -setup returns the following:
MEX configured to use 'gcc' for C language compilation.
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the
new API. You can find more information about this at:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.
To choose a different language, select one from the following:
mex -setup C++
mex -setup FORTRAN
The error given is:
??? Build error: Compilation returned error status code 2. See the target build log in the report for further details.
Error in ==> CalRigidEnergy3d Line: 1 Column: 1
Code generation failed: Open error report.
Error using codegen (line 146)
The Build Log is:
1 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "CalRigidEnergy3d_data.c"
2 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "CalRigidEnergy3d_initialize.c"
3 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "CalRigidEnergy3d_terminate.c"
4 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "CalRigidEnergy3d.c"
5 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "interface/_coder_CalRigidEnergy3d_api.c"
6 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "CalRigidEnergy3d_emxutil.c"
7 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "interface/_coder_CalRigidEnergy3d_mex.c"
8 /usr/bin/gcc -c -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -D_GNU_SOURCE -DMATLAB_MEX_FILE -DMX_COMPAT_32 -O -DNDEBUG -I "/usr/local/MATLAB/R2014b/simulink/include" -I "/usr/local/MATLAB/R2014b/toolbox/shared/simtargets" -I "/home/ari" -I "/home/ari/codegen/mex/CalRigidEnergy3d" -I "/home/ari/codegen/mex/CalRigidEnergy3d/interface" -I "/usr/local/MATLAB/R2014b/extern/include" -I "." "interface/_coder_CalRigidEnergy3d_info.c"
9 /usr/bin/gcc -Wl,--version-script,CalRigidEnergy3d_mex_mex.map -pthread -Wl,--no-undefined -Wl,-rpath-link,/usr/local/MATLAB/R2014b/bin/glnxa64 -shared -L/usr/local/MATLAB/R2014b/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++ -o CalRigidEnergy3d_mex.mexa64 CalRigidEnergy3d_data.o CalRigidEnergy3d_initialize.o CalRigidEnergy3d_terminate.o CalRigidEnergy3d.o _coder_CalRigidEnergy3d_api.o CalRigidEnergy3d_emxutil.o _coder_CalRigidEnergy3d_mex.o _coder_CalRigidEnergy3d_info.o -lemlrt -lcovrt -lut -lmwmathutil -lmwblas
10 _coder_CalRigidEnergy3d_api.o: In function `c_emlrt_marshallIn':
11 _coder_CalRigidEnergy3d_api.c:(.text+0xb0): undefined reference to `mxGetData'
12 _coder_CalRigidEnergy3d_api.o: In function `CalRigidEnergy3d_api':
13 _coder_CalRigidEnergy3d_api.c:(.text+0x2cb): undefined reference to `mxGetData'
14 _coder_CalRigidEnergy3d_api.c:(.text+0x427): undefined reference to `mxGetData'
15 _coder_CalRigidEnergy3d_mex.o: In function `mexFunction':
16 _coder_CalRigidEnergy3d_mex.c:(.text+0x3e): undefined reference to `mexAtExit'
17 _coder_CalRigidEnergy3d_info.o: In function `b_emlrt_marshallOut':
18 _coder_CalRigidEnergy3d_info.c:(.text+0x62): undefined reference to `mxGetData'
19 _coder_CalRigidEnergy3d_info.o: In function `emlrtMexFcnProperties':
20 _coder_CalRigidEnergy3d_info.c:(.text+0x8cac): undefined reference to `mxCreateStructMatrix_700'
21 _coder_CalRigidEnergy3d_info.c:(.text+0x8cc7): undefined reference to `mxCreateStructMatrix_700'
22 _coder_CalRigidEnergy3d_info.c:(.text+0x8cd9): undefined reference to `mxCreateLogicalMatrix_700'
23 _coder_CalRigidEnergy3d_info.c:(.text+0x8ce8): undefined reference to `mxCreateString'
24 _coder_CalRigidEnergy3d_info.c:(.text+0x8cfd): undefined reference to `mxSetFieldByNumber_700'
25 _coder_CalRigidEnergy3d_info.c:(.text+0x8d0a): undefined reference to `mxCreateDoubleScalar'
26 _coder_CalRigidEnergy3d_info.c:(.text+0x8d1f): undefined reference to `mxSetFieldByNumber_700'
27 _coder_CalRigidEnergy3d_info.c:(.text+0x8d2c): undefined reference to `mxCreateDoubleScalar'
28 _coder_CalRigidEnergy3d_info.c:(.text+0x8d41): undefined reference to `mxSetFieldByNumber_700'
29 _coder_CalRigidEnergy3d_info.c:(.text+0x8d56): undefined reference to `mxSetFieldByNumber_700'
30 _coder_CalRigidEnergy3d_info.c:(.text+0x8d62): undefined reference to `mxCreateString'
31 _coder_CalRigidEnergy3d_info.c:(.text+0x8d77): undefined reference to `mxSetFieldByNumber_700'
32 _coder_CalRigidEnergy3d_info.c:(.text+0x8d91): undefined reference to `mxSetFieldByNumber_700'
33 _coder_CalRigidEnergy3d_info.c:(.text+0x8da6): undefined reference to `mxSetFieldByNumber_700'
34 collect2: ld returned 1 exit status
35 gmake: *** [CalRigidEnergy3d_mex.mexa64] Error 1

Best Answer

The version of GCC shipped with Ubuntu is not compatible with the Makefile generated by MATLAB Coder. You can edit the template for this Makefile in your MATLAB installation to work around this by following the answer:
Related Question