- Call "which" with mexFunctionName() as the argument
- Call "filesep"
- Truncate the result of the "which" at the last occurrance of "filesep"
Location of mex executable
9 ビュー (過去 30 日間)
古いコメントを表示
I am trying to find the location of the mex executable for use with another program (madagascar). In order to use madagascar, it needs to generate sone mex files from some c source code, so it needs to know the file location of the mex executable. I can compile and execute mex files in matlab, but i am unable to find the exact location of the mex executable so that I can link this external program to it (i have tried many different possible locations without success). Unfortunately I cannot manually generate the mex files that madagascar needs through matlab since it uses a non-standard c library file (rsf.h). If anyone can help me locate the exact file path for the mex executable that would be great.
I am using matlab 2016a and am using minGW-w64 4.9.2 as the compiler.
0 件のコメント
回答 (1 件)
Povl Abrahamsen
2021 年 8 月 13 日
I realize it's five years since this question was asked, but I've just had the same issue, and have come up with the following solution:
#include "mex.h"
#include "gamma_functions.h"
#include <string.h>
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mxArray *rhs[1], *lhs[1], *lhs2[1];
char *path_to_mexfile, *end_of_path, *filesep;
int pathlen;
rhs[0]=mxCreateString(mexFunctionName());
mexCallMATLAB(1, lhs, 1, rhs, "which");
mxDestroyArray(rhs[0]);
pathlen = mxGetNumberOfElements(lhs[0]) + 1;
path_to_mexfile = mxCalloc(pathlen, sizeof(char));
mxGetString(lhs[0], path_to_mexfile, pathlen);
mexCallMATLAB(1, lhs2, 0, NULL, "filesep");
filesep=(char *)mxGetChars(lhs2[0]);
end_of_path=strrchr(path_to_mexfile,filesep[0]);
end_of_path[1]=0; /* terminate path after last filesep */
/* path_to_mexfile now contains the path to the mex file,
with a trailing file separator */
}
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!