【发布时间】:2023-03-17 09:00:01
【问题描述】:
我正在尝试在 MATLAB MEX 文件中使用 FFTW 库。我从FFTW.ORG for Windows 获得这个库,并使用此代码制作 lib 文件
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
然后,当我通过这段代码直接在 VC++ (Visual Studio 2013) 中使用这些文件时
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "C:\Users\Maysam\Downloads\Compressed\fftw-3.3.4\api\fftw3.h"
#pragma comment(lib, "C:\\Windows\\SysWOW64\\libfftw3-3.lib")
void main()
{
int i, j, bw, bw2_1, size, size2_1, nrow, ncol;
int data_is_real;
int cutoff;
int rank, howmany_rank;
double *rresult, *iresult, *rdata, *idata;
double *workspace, *weights;
fftw_plan dctPlan;
fftw_plan fftPlan;
fftw_iodim dims[1], howmany_dims[1];
bw = 2;
weights = (double *)malloc(sizeof(double) * 4 * bw);
rdata =(double *)malloc(sizeof(double) * 5 * bw);
dctPlan = fftw_plan_r2r_1d(2 * bw, weights, rdata,
FFTW_REDFT10, FFTW_ESTIMATE);
}
一切正常,编译没有错误,但是当我尝试编译和使用这段代码时
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "C:\Users\Maysam\Downloads\Compressed\fftw-3.3.4\api\fftw3.h"
#include <mex.h>
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int i, j, bw, bw2_1, size, size2_1, nrow, ncol;
int data_is_real;
int cutoff;
int rank, howmany_rank;
double *rresult, *iresult, *rdata, *idata;
double *workspace, *weights;
fftw_plan dctPlan;
fftw_plan fftPlan;
fftw_iodim dims[1], howmany_dims[1];
bw = 2;
weights = (double *)malloc(sizeof(double) * 4 * bw);
rdata = (double *)malloc(sizeof(double) * 5 * bw);
dctPlan = fftw_plan_r2r_1d(2 * bw, weights, rdata,
FFTW_REDFT10, FFTW_ESTIMATE);
}
在 MATLAB 中使用mex,如下所示
mex '-LC:\fftw-3.3.4-dll32' -llibfftw3-3.lib test.c
我收到此错误
Error using mex
Creating library test.lib and object test.exp
test.obj : error LNK2019: unresolved external symbol fftw_plan_r2r_1d referenced in function mexFunction
test.mexw64 : fatal error LNK1120: 1 unresolved externals
有人有解决这个问题的建议或想法吗?
【问题讨论】:
-
不要将
-LC:\fft...放在引号中。但也基于以dll32结尾的路径,并且您正在构建一个 64 位 MEX 文件 (.mexe64),您可能存在架构不匹配。 -
坦克很多,它工作,我使用 X64 lib 文件而不是 X86。
-
很高兴它成功了。如果您愿意,您也可以投票。 ;)