【发布时间】:2018-04-11 18:19:34
【问题描述】:
我的目标是混合使用库 FFTW 的 c 代码。
#include <matrix.h>
#include <mex.h>
#include "C:\Users\my_user_name\Documents\fftw-3.3.5-dll64\fftw3.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);
}
我目前使用的是 minGW,不是 Visual C++。如果(来自 Matlab)我打电话给
>>mex -c -LC:\Users\my_user_name\Documents\fftw-3.3.5-dll64 demo_fftw.c
它编译正确,但正在运行
>> mex -LC:\Users\my_user_name\Documents\fftw-3.3.5-dll64 demo_fftw.c
Building with 'MinGW64 Compiler (C)'.
Error using mex C:\Users\MPUTHA~1\AppData\Local\Temp\mex_200676192178726_4216\demo_fftw.obj:demo_fftw.c:(.text+0x40):undefined reference to `__imp_fftw_plan_r2r_1d'collect2.exe: error: ld returned 1 exit status
我认为错误是因为虽然 fftw_plan_r2r_1d 是在 fftw3.h 中声明的,但它是在链接器找不到的其他地方定义的。我知道,如果我使用 Visual C++,那么 .lib 文件包含定义,但 README 仅告诉您在使用 Visual C++ 时编译 lib,并没有说明使用 mingw。
mingw 的 .lib 文件相当于什么?我还需要.lib 吗?如果是这样,我该如何编译它们?
如果这个问题是重复的,我深表歉意,但我环顾四周,发现很多建议在您使用 Visual C++ 时有效,但与 mingw 无关。
【问题讨论】:
-
看起来需要与 fftw 库链接。比如
-lfftw(用-L/path/to/lib提供库所在的路径 -
@Jean-FrançoisFabre 所以我需要生成相应的库吗?如何使用 MinGW 做到这一点?
-
在 MinGW 上它将是一个 DLL 或 .a 文件。 lib文件是存根AFAIR,无论如何你都需要DLL。您可以在 windows 上使用 fftw 的二进制发行版,无需重新构建它。