About mex function problem
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi everyone,
I recieved the code using mex function. When I run it on Matlab, it occured errors as below
Error using mex
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x0):
multiple definition of `vsnprintf'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x3b0): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x10):
multiple definition of `getc'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x3c0): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x40):
multiple definition of `putc'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x3f0): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x70):
multiple definition of `getchar'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x420): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0xa0):
multiple definition of `putchar'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x450): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0xe0):
multiple definition of `fopen64'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x490): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0xf0):
multiple definition of `ftello64'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x4a0): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x120):
multiple definition of `vsnwprintf'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x4d0): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x130):
multiple definition of `strtof'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x4e0): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x150):
multiple definition of `wcstof'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x500): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x170):
multiple definition of `_Exit'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x520): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x180):
multiple definition of `llabs'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x530): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x1a0):
multiple definition of `atoll'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x550): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x1b0):
multiple definition of `lltoa'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x560): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x1c0):
multiple definition of `ulltoa'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x570): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x1d0):
multiple definition of `wtoll'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x580): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x1e0):
multiple definition of `lltow'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x590): first defined here
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\c_mexapi_version.obj:c_mexapi_version.c:(.text+0x1f0):
multiple definition of `ulltow'
C:\Users\BAO_MA~1\AppData\Local\Temp\mex_85703934924329_1184\lbfgsC.obj:lbfgsC.c:(.text+0x5a0): first defined here
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libm.a when searching for -lm
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmingw32.a when searching for -lmingw32
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmoldname.a when searching for -lmoldname
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmingwex.a when searching for -lmingwex
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmsvcrt.a when searching for -lmsvcrt
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libuser32.a when searching for -luser32
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libkernel32.a when searching for -lkernel32
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libadvapi32.a when searching for -ladvapi32
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libshell32.a when searching for -lshell32
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmingw32.a when searching for -lmingw32
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmoldname.a when searching for -lmoldname
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmingwex.a when searching for -lmingwex
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
skipping incompatible C:/HEN_HOUSE/gnu/lib\libmsvcrt.a when searching for -lmsvcrt
C:/ProgramData/MATLAB/SupportPackages/R2019b/3P.instrset/mingw_w64.instrset/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
i386 architecture of input file `C:/HEN_HOUSE/gnu/lib/dllcrt2.o' is incompatible with i386:x86-64 output
C:/HEN_HOUSE/gnu/lib/dllcrt2.o: In function `__dll_exit':
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:140: undefined reference to `_free'
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:148: undefined reference to `_fflush'
C:/HEN_HOUSE/gnu/lib/dllcrt2.o: In function `DllMainCRTStartup':
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:87: undefined reference to `_DllMain@12'
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:56: undefined reference to `_malloc'
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:67: undefined reference to `__pei386_runtime_relocator'
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:74: undefined reference to `___main'
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:59: undefined reference to `__errno'
C:/HEN_HOUSE/gnu/lib/dllcrt2.o: In function `atexit':
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:166: undefined reference to `___dllonexit'
C:/HEN_HOUSE/gnu/lib/dllcrt2.o: In function `_onexit':
d:/src/mingw/build/runtime/../../runtime/dllcrt1.c:182: undefined reference to `___dllonexit'
collect2.exe: error: ld returned 1 exit status
I tried to understand it and fixed but I did not resolve.
I also represented the code here.
#include <math.h>
#include "mex.h"
/* See lbfgs.m for details! */
/* This function may not exit gracefully on bad input! */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
/* Variable Declarations */
double *s, *y, *g, *H, *d, *ro, *alpha, *beta, *q, *r;
int nVars,nSteps,lhs_dims[2];
double temp;
int i,j;
/* Get Input Pointers */
g = mxGetDoubles(prhs[0]);
s = mxGetDoubles(prhs[1]);
y = mxGetDoubles(prhs[2]);
H = mxGetDoubles(prhs[3]);
/* Compute number of variables (p), rank of update (d) */
nVars = mxGetDimensions(prhs[1])[0];
nSteps = mxGetDimensions(prhs[1])[1];
/* Allocated Memory for Function Variables */
ro = mxCalloc(nSteps,sizeof(double));
alpha = mxCalloc(nSteps,sizeof(double));
beta = mxCalloc(nSteps,sizeof(double));
q = mxCalloc(nVars*(nSteps+1),sizeof(double));
r = mxCalloc(nVars*(nSteps+1),sizeof(double));
/* Set-up Output Vector */
lhs_dims[0] = nVars;
lhs_dims[1] = 1;
plhs[0] = mxCreateNumericArray(2,lhs_dims,mxDOUBLE_CLASS,mxREAL);
d = mxGetDoubles(plhs[0]);
/* ro = 1/(y(:,i)'*s(:,i)) */
for(i=0;i<nSteps;i++)
{
temp = 0;
for(j=0;j<nVars;j++)
{
temp += y[j+nVars*i]*s[j+nVars*i];
}
ro[i] = 1/temp;
}
/* q(:,k+1) = g */
for(i=0;i<nVars;i++)
{
q[i+nVars*nSteps] = g[i];
}
for(i=nSteps-1;i>=0;i--)
{
/* alpha(i) = ro(i)*s(:,i)'*q(:,i+1) */
alpha[i] = 0;
for(j=0;j<nVars;j++)
{
alpha[i] += s[j+nVars*i]*q[j+nVars*(i+1)];
}
alpha[i] *= ro[i];
/* q(:,i) = q(:,i+1)-alpha(i)*y(:,i) */
for(j=0;j<nVars;j++)
{
q[j+nVars*i]=q[j+nVars*(i+1)]-alpha[i]*y[j+nVars*i];
}
}
/* r(:,1) = q(:,1) */
for(i=0;i<nVars;i++)
{
r[i] = H[0]*q[i];
}
for(i=0;i<nSteps;i++)
{
/* beta(i) = ro(i)*y(:,i)'*r(:,i) */
beta[i] = 0;
for(j=0;j<nVars;j++)
{
beta[i] += y[j+nVars*i]*r[j+nVars*i];
}
beta[i] *= ro[i];
/* r(:,i+1) = r(:,i) + s(:,i)*(alpha(i)-beta(i)) */
for(j=0;j<nVars;j++)
{
r[j+nVars*(i+1)]=r[j+nVars*i]+s[j+nVars*i]*(alpha[i]-beta[i]);
}
}
/* d = r(:,k+1) */
for(i=0;i<nVars;i++)
{
d[i]=r[i+nVars*nSteps];
}
/* Free Memory */
mxFree(ro);
mxFree(alpha);
mxFree(beta);
mxFree(q);
mxFree(r);
}
I have been using Matlab 2019b and mexw64.
Anybody can help me. Thank you so much.
Thu Nguyen
9 Kommentare
Rahul Pathak
am 8 Mai 2020
I am also facing the similar type of problem and I am working on 2019b ver.
Kindly help me.
Antworten (1)
James Tursa
am 25 Apr. 2020
This code is incorrect:
int nVars,nSteps,lhs_dims[2];
:
plhs[0] = mxCreateNumericArray(2,lhs_dims,mxDOUBLE_CLASS,mxREAL);
The int type is almost certainly a 32-bit integer on your system, but for 64-bit compiles that dimension array needs to be mwSize (which probably converts to a 64-bit size_t integer type). So a mismatch. The code needs to be this:
mwSize lhs_dims[2];
0 Kommentare
Siehe auch
Kategorien
Mehr zu Introduction to Installation and Licensing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!