Frage P3DFFT Installation - "libfftw3.a nicht gefunden"


Ich habe den Befehl benutzt

 ./configure --prefix=/usr/local/ --enable-gnu --enable-fftw --with-fftw=/home/kiran1209/Downloads/fftw-3.3.4/.libs/ LDflags="-lmpi_f90 -lmpi_f77"

(Ist der Befehl korrekt?)

aber nach einiger Zeit gibt es den Fehler

configure: error: libfftw3.a was not found in given location!

Die Datei existiert aber mit unterschiedlicher Erweiterung .la. Was soll ich mit diesem Fehler machen?


1
2018-05-17 04:46


Ursprung


Welche Version von Ubuntu benutzt du? - N0rbert
P3DFFT: ./configure weigert sich, libfftw3a.a in zu erkennen irgendein Lage. Auch / lib / (und / lib64 /) vorgeschlagen von @steeldriver hier askubuntu.com/questions/1036959/installing-p3dfft (Ihr vorheriger P3DFFT-Thread) ... Siehe configure, Zeilen 3315 .. 3326. (Ubuntu 18.04 wurde für meine Tests verwendet.) - Knud Larsen


Antworten:


Das erste, was zu beachten ist, ist das Argument zu --with-fftw muss der Pfad der obersten Ebene zu den FFTW3-Header-Dateien und -Bibliotheken sein. Also zum Beispiel wenn die Header drin sind /usr/include und die Bibliotheken sind unter /usr/lib (der Standard, wenn Paket libfftw3-dev wird aus dem Ubuntu-Repository installiert), sollte der Wert als angegeben werden --with-fftw=/usr

Das zusätzliche Problem in diesem Fall ist, dass das bereitgestellte Konfigurations-Skript so aussieht, als sei es fest verdrahtet, um nur in den lib und lib64 Unterverzeichnisse:

   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

Die Verwendung von a lib64 Unterverzeichnis ist eine alte Konvention, die Debian vorausgeht Multiarch Framework - der moderne Speicherort für 64-Bit-Bibliotheken wäre lib/x86_64-linux-gnu

Dort kann sei eine 'saubere' Möglichkeit, dies neu zu konfigurieren (vielleicht mit autoreconf) aber ich weiß es nicht - wenn es Ihnen nichts ausmacht, eine Schnellkorrektur zu verwenden, dann sollte es ausreichen, den Suchort mit zu fixieren sed:

sed -i.bak 's:lib64:lib/x86_64-linux-gnu:g' configure

und dann erneut ausführen ./configure


2
2018-05-17 11:05





Ref. @steeeldriver: sed -i.bak 's: lib64: lib / x86_64-linux-gnu: g'   konfigurieren

Das sed Die Bearbeitung ist mit der ersten Konfiguration in Ordnung. Aber make erzeugt eine neue Datei configure.

Ubuntu 16.04 und 18.04 bauen Beispiel:

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

Keine Fehler, 16.04 oder 18.04.


Bearbeiten: Verwenden Sie Ihre neuen Optionen, ref. make: *** [all] Error 2 bei der Installation von P3DFFT

./configure --enable-gnu --enable-fftw --with-fftw=/usr --enable-estimate --enable-measure --enable-patient

... und mit dem Standard fftw3: Keine Fehler. Weder mit p3dfft-2.7.6 oder git clone https://github.com/sdsc/p3dfft.git


Verwenden von fftw3 in / usr / local /: 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

Und p3dfft /:

./configure --enable-gnu --enable-fftw --with-fftw=/usr/local --enable-estimate --enable-measure --enable-patient
make 

Keine Fehler, 16.04 oder 18.04, außer für cannot find -lmpichf90 : {libmpichf90.a, libmpichf90.so}, d.h. wenn der Fahrertest ausgeführt wird. Nein {libmpichf90.a, libmpichf90.so} in den Standard-Ubuntu-Paketen.


1
2018-05-17 13:45



Ich habe das Skript verwendet: "./configure --enable-fftw --with-fftw = / usr / local FC = gfortran CC = gcc". Es lief und dann der "make" -Befehl. Aber es gibt den folgenden Fehler, Makefile: 345: Rezept für Ziel 'alle' fehlgeschlagen make: *** [alle] Error 2 - Kiran Jadhav
Kiran Jadhav: Drop die FC=gfortran CC=gcc um die Tests zu vermeiden → Lesen Sie meine Antwort: ... ... » wenn der Fahrertest ausgeführt wird «.... .... - Knud Larsen