Я пытаюсь запустить mex-файл, который я создал и скомпилировал.
Тем не менее, программа падает, когда я пытаюсь использовать этот mex-файл с сообщением:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()
Чтобы попытаться решить проблему, я полностью очистил файл, оставив только:
#include "mex.h"
#include "lsm_fast_marching_method.h"
/* Input Arguments */
#define PHI (prhs[0])
#define BACKGROUND (prhs[1])
/* Output Arguments */
#define SKELETON (plhs[0])
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
return;
}
Содержимое заголовочного файла:
#ifndef included_fast_marching_method_h
#define included_fast_marching_method_h
#ifdef __cplusplus
extern "C" {
#endif
int computeExtensionFields2d(
double *distance_function,
double **extension_fields,
double *phi,
double *mark,
double **source_fields,
int num_extension_fields,
int spatial_derivative_order,
int *grid_dims,
double *dx);
int computeExtensionFields2d_WithMaxVal(
double *distance_function,
double **extension_fields,
double *phi,
double *mark,
double **source_fields,
int num_extension_fields,
int spatial_derivative_order,
int *grid_dims,
double *dx,
double max_value);
int computeDistanceFunction2d(
double *distance_function,
double *phi,
double *mark,
int spatial_derivative_order,
int *grid_dims,
double *dx);
int solveEikonalEquation2d(
double *phi,
double *speed,
double *mask,
int spatial_derivative_order,
int *grid_dims,
double *dx);
int computeExtensionFields3d(
double *distance_function,
double **extension_fields,
double *phi,
double *mask,
double **source_fields,
int num_extension_fields,
int spatial_derivative_order,
int *grid_dims,
double *dx);
int computeDistanceFunction3d(
double *distance_function,
double *phi,
double *mask,
int spatial_derivative_order,
int *grid_dims,
double *dx);
int solveEikonalEquation3d(
double *phi,
double *speed,
double *mask,
int spatial_derivative_order,
int *grid_dims,
double *dx);
int doHomotopicThinning(
double *thinned_img,
double *phi,
double *background,
int *grid_dims);
bool isSimplePoint(int* grid_point_status, double* background, int* grid_idx, int neighbors[][3],
int* grid_dims);
#ifdef __cplusplus
}
#endif
#endif
Но программа все равно вылетает с той же ошибкой !! Я попытался запустить его в отладчике за пределами Matlab (GDB), и он все еще вылетает с тем же сообщением ..
Я использую 64-битную систему Linux.
Есть идеи, как это происходит?
Заранее спасибо.