我使用了命令
./configure --prefix=/usr/local/ --enable-gnu --enable-fftw --with-fftw=/home/kiran1209/Downloads/fftw-3.3.4/.libs/ LDflags="-lmpi_f90 -lmpi_f77"
(命令正确吗?)
但运行一段时间后出现错误
configure: error: libfftw3.a was not found in given location!
文件存在但扩展名不同.la
。我该如何处理此错误?
答案1
首先要注意的是,参数--with-fftw
必须是 FFTW3 头文件和库的顶级路径。例如,如果头文件在 中,/usr/include
而库文件在 下/usr/lib
(默认,当软件包libfftw3-dev
从 Ubuntu 存储库安装时),则应将值指定为--with-fftw=/usr
在这种情况下,额外的问题是,提供的配置脚本似乎被硬连线为仅查看lib
和lib64
子目录:
3315 if test -e $withfftw/lib/libfftw3.a ; then
3316 FFTW_INC="-I$withfftw/include"
3317
3318 FFTW_LIB="$withfftw/lib/libfftw3.a"
3319
3320 elif test -e $withfftw/lib64/libfftw3.a ; then
3321 FFTW_INC="-I$withfftw/include"
3322
3323 FFTW_LIB="$withfftw/lib64/libfftw3.a"
3324
3325 else
3326 as_fn_error $? "libfftw3.a was not found in given location!" "$LINENO" 5
3327 fi
使用lib64
子目录是一个古老的惯例,早于 Debian 的多架构框架 - 64 位库的现代位置是lib/x86_64-linux-gnu
那里可能是一种“干净”的方法来重新配置它(也许使用autoreconf
),但是我不知道 - 如果你不介意使用快速'n'dirty修复,那么使用以下方法修复搜索位置就足够了sed
:
sed -i.bak 's:lib64:lib/x86_64-linux-gnu:g' configure
然后重新运行./configure
答案2
参考@steeeldriver: sed -i.bak 's:lib64:lib/x86_64-linux-gnu:g' 配置
第一次配置sed
就可以编辑。但是make
会生成一个新文件configure
。
Ubuntu 16.04 和 18.04 构建示例:
cd /usr/lib/
sudo ln -s x86_64-linux-gnu/libfftw3.a
cd /usr/bin/
sudo ln -s aclocal-1.15 aclocal-1.14
sudo ln -s automake-1.15 automake-1.14
git clone https://github.com/sdsc/p3dfft.git
cd p3dfft/
./configure --enable-fftw --with-fftw=/usr && make
没有错误,16.04 或 18.04。
编辑:使用您的新选项,参考。make: *** [all] 安装 P3DFFT 时出现错误 2
./configure --enable-gnu --enable-fftw --with-fftw=/usr --enable-estimate --enable-measure --enable-patient
... 并使用默认的 fftw3 :没有错误。无论是p3dfft-2.7.6
还是git clone https://github.com/sdsc/p3dfft.git
在 /usr/local/ 中使用 fftw3:fftw3_3.3.7.orig.tar.xz
http://archive.ubuntu.com/ubuntu/pool/main/f/fftw3/fftw3_3.3.7.orig.tar.xz
cd fftw-3.3.7/
./configure --enable-shared --enable-static --enable-threads --enable-openmp --enable-mpi --prefix=/usr/local
make && sudo make install
和 p3dfft/:
./configure --enable-gnu --enable-fftw --with-fftw=/usr/local --enable-estimate --enable-measure --enable-patient
make
没有错误,16.04 或 18.04,除了cannot find -lmpichf90
:{libmpichf90.a, libmpichf90.so} 即如果运行了驱动程序测试. 默认的 Ubuntu 软件包中没有 {libmpichf90.a, libmpichf90.so}。