MEX link failed

2 views (last 30 days)
Lofi
Lofi on 21 Oct 2011
I met link failed problem when I compiling mex code. I'm using matlab r2011a, with win7, and I got the same result under linux.
Error Message:
D:\Study Stuff\Robust PCA\Robust PCA\src\ENV\packages\PROPACK>mex reorth_mex.c
Writing library for reorth_mex.mexw32
*c:\users\lofi\appdata\local\temp\mex_ufvcxe\reorth_mex.obj .text: undefined reference to '_reorth_'*
D:\PROGRA~1\MATLAB\R2011A\BIN\MEX.PL: Error: Link of 'reorth_mex.mexw32'
failed.
Source Code:
#include <string.h>
#include "mex.h"
/* Template for reorth: */
void reorth_(int *n, int *k, double *V, int *ldv, double *vnew,
double *normvnew, double *index, double *alpha, double *work,
int *iflag, int *nre);
/* Here comes the gateway function to be called by Matlab: */
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
int n, k1, k, imethod, inre;
double *work;
if (nrhs != 6)
mexErrMsgTxt("reorth requires 6 input arguments");
else if (nlhs < 2)
mexErrMsgTxt("reorth requires at least 2 output arguments");
n = mxGetM(prhs[0]); /* get the dimensions of the input */
k1 = mxGetN(prhs[0]);
k = mxGetM(prhs[3]) * mxGetN(prhs[3]);
/* Create/allocate return argument, a 1x1 real-valued Matrix */
plhs[0]=mxCreateDoubleMatrix(n,1,mxREAL);
plhs[1]=mxCreateDoubleMatrix(1,1,mxREAL);
if (nlhs>2)
plhs[2]=mxCreateDoubleMatrix(1,1,mxREAL);
work = mxCalloc(k,sizeof(double));
memcpy(mxGetPr(plhs[0]),mxGetPr(prhs[1]), n*sizeof(double));
memcpy(mxGetPr(plhs[1]),mxGetPr(prhs[2]), sizeof(double));
imethod = (int) mxGetScalar(prhs[5]);
reorth_(&n, &k, mxGetPr(prhs[0]), &n, mxGetPr(plhs[0]),
mxGetPr(plhs[1]), mxGetPr(prhs[3]), mxGetPr(prhs[4]),
work,&imethod,&inre);
if (nlhs>2)
*(mxGetPr(plhs[2])) = (double) inre*k;
mxFree(work);
}

Answers (1)

Jan
Jan on 21 Oct 2011
Where is the definition of reorth_? It must be either included in reorth_mex.c or added to the mex command.

Categories

Find more on Write C Functions Callable from MATLAB (MEX Files) in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!