2016-03-29 3 views
0

J'ai un programme Fortran 90 qui utilise des sous-programmes lapack et fonctionne avec succès sur mon système Ubuntu. Maintenant, je veux l'exécuter sur Mac (OS X Version 10.11.4). J'utilise le compilateur gfortran dans le cadre de gcc, installé depuis les dépôts homebrew, et la bibliothèque lapack, installée dans/usr/local/lib /. Quand je tente de compiler mon code, je reçois l'erreur suivante:Problème lors de la liaison des bibliothèques lapack et fftw3

gfortran my_prog.f90 -L/usr/local/lib/ -llapack 
Undefined symbols for architecture x86_64: 
    "_daxpy_", referenced from: 
     _zggbal_ in liblapack.a(zggbal.o) 
...  
    "_ztrmv_", referenced from: 
     _zlarft_ in liblapack.a(zlarft.o) 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

Après une recherche google, je compris que le problème est parce que la liaison. Quand je compile comme ça, tout fonctionne bien:

gfortran my_prog.f90 -llapack 

également lorsque llapack du cadre Accelerate est utilisé, le compilateur ne se plaint pas.

gfortran my_prog.f90 -framework accelerate 

Les bibliothèques sont de l'architecture x86-64:

lipo -info *.a 
input file libfftw3.a is not a fat file 
input file liblapack.a is not a fat file 
Non-fat file: libfftw3.a is architecture: x86_64 
Non-fat file: liblapack.a is architecture: x86_64 

LAPACK est pas le seul qui me donne une erreur, plus tard, le même problème apparaît avec FFTW3. Pourriez-vous s'il vous plaît me donner un indice pour la solution à ce problème?

+0

'daxpy' et' ztrmv' font partie de la librairie Blas, pas lapack. Par conséquent, pourriez-vous essayer de lier contre Blas en faisant '-llapack -lblas'? – francis

Répondre

0

FFTW ne fait pas partie du accelerate framework. Si vous voulez l'utiliser, vous devez également ajouter -lfftw3 aux options de compilation.

Si les bibliothèques ne sont pas dans la LIBRARY_PATH par défaut, vous devrez peut-être également spécifier -L/path/to/fftw/libs. La même chose vaut pour le chemin d'inclusion si vous utilisez ses modules -I/path/to/fftw/includes. Notez que la partie vDSP de la bibliothèque fournit également FFT implementations. Vous pourriez ne pas avoir besoin de FFTW du tout.