C语言 为什么集群上的GCC不加载FFTW库?



我正在尝试使用FFTW 3.3.5在集群上执行一个简单的FFT。

fftwf_plan plan = fftwf_plan_dft_1d(N, idata, odata, FFTW_FORWARD, FFTW_ESTIMATE);
//--------------------Perform FFT--------------------------
fftwf_execute(plan);
//-------------------Inverse FFT--------------------------
plan = fftwf_plan_dft_1d(N, odata, odata, FFTW_BACKWARD, FFTW_ESTIMATE);
fftwf_execute(plan);
fftwf_destroy_plan(plan);

我试着用下面的命令来执行上面的代码。

gcc -o fftw.out /cm/extra/apps/FFTW/3.3.5/GCC-4.9.3_MVAPICH2-2.2-GDR/lib/libfftw3.a -lm fftwCPU.c

gcc -o fftw.out -lfftw3 -lm fftwCPU.c -L/cm/extra/apps/FFTW/3.3.5/GCC-4.9.3_MVAPICH2-2.2-GDR/lib/

路径也加载在LD_LIBRARY_PATH环境变量中。

GCC能够正确地找到路径,但它没有链接库。我得到一个未定义的引用错误到fftw的所有函数。

在上面的代码中,我也使用了fftw_函数而不是fftwf_函数。

更重要的是,这段代码在我的本地系统上运行没有任何问题。

我做错了什么吗?

您的选项顺序不正确:将-l选项放在最后,如下所示:

$ gcc -o fftw.out fftwCPU.c -L/cm/extra/apps/FFTW/3.3.5/GCC-4.9.3_MVAPICH2-2.2-GDR/lib/ -lfftw3 -lm

这也是合乎逻辑的;您应该在指定从这些路径加载哪些库之前指定路径。

从精细手册:

在命令中写入该选项会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,"foo。0 -lz条。O '在文件foo之后搜索库' z '。但是在酒吧之前。如果酒吧。0指的是' z '中的函数,这些函数可能不会被加载。

相关内容

最新更新