pyFFTW 安装 -> 找不到 -lfftw3_threads

1 投票
2 回答
3186 浏览
提问于 2025-04-18 13:55

我这几天一直在尝试在我的 Opensuse 13.1 x86_64 上安装 pyFFTW,但总是遇到一些问题:

第一次安装 pyFFTW 时,因为缺少 fftw 的一些库文件,导致安装失败。我发现最好是从源代码安装 fftw,所以我就这么做了。

这样解决了缺少库的问题,但当我尝试从源代码构建 pyFFTW 或者用 pip 安装时,又出现了新的问题:

/usr/local/lib64/libfftw3.a: could not read symbols: Bad value

我发现有些人也遇到过类似的问题,但没有找到真正的解决办法。我在 这个讨论中找到了一个线索,但我搞不清楚在安装过程中哪里可以更改编译器的标志。此外,我在 fftw 配置过程的日志中发现了:

checking for gfortran option to produce PIC... -fPIC
checking if gfortran PIC flag -fPIC works... yes

有没有什么想法?

谢谢!

编辑:

我尝试使用 --enable-shared 和 enable 作为配置标志,

/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3f 
/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3l 
/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3_threads 
/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3f_threads 
/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3l_threads

然后我做了一些研究,发现 ./configure 可以使用 --enable-float 标志,这样错误信息减少到了:

/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3l
/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3_threads
/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3l_threads

由于后缀 l 似乎代表长双精度,我发现可以使用 --enable-long-double。但现在我又卡住了:

/ ... /x86_64-suse-linux/bin/ld: cannot find -lfftw3_threads

我当前的 ./configure 看起来是这样的:

./configure --enable-long-double --enable-threads --enable-openmp --enable-shared

有没有人知道怎么把这个库安装好?

2 个回答

0

我可以补充一下关于如何在 OS X 10.9.5 上使用 pip install 的细节:你需要这样写,才能找到所有三个 FFTW 的安装。

rollett$ sudo CPATH=/Users/Shared/fftw334single/include/
LIBRARY_PATH=/Users/Shared/fftw334single/lib/:/Users/Shared/fftw334/lib/:/Users/Shared/fftw334long/lib/ 
pip install pyFFTW
2

你需要从这里下载基本的FFTW包,然后按照以下步骤构建三次:

$ cd ~/bin/fftw-3.3.5

或者你选择的其他解压目录,

$ ./configure --enable-threads --enable-shared
$ make
$ sudo make install
$ ./configure --enable-threads --enable-shared --enable-float
$ make
$ sudo make install
$ ./configure --enable-threads --enable-shared --enable-long-double 
$ make
$ sudo make install

源代码可以在这里找到:https://github.com/pyFFTW/pyFFTW/issues/70

撰写回答