Échec de la liaison du code c avec lapack / blas: référence non définie

J’essaie depuis des heures et ça me rend fou. La dernière erreur que je reçois est:

demo_cblas.c:(.text+0x83): undefined reference to `clapack_sgetrf' demo_cblas.c:(.text+0xa3): undefined reference to `clapack_sgesorting' 

Je comstack le code en utilisant

 /usr/bin/gcc -o demo_cblas demo_cblas.c -L /usr/lib64 -l :libgfortran.so.3 -L /usr/lib64 \ -llapack -L /usr/lib64 -lblas 

J’essaie avec et sans libgfortran, avec différents compilateurs gcc-33, gcc-47, gcc-48. Le code de test ne vient pas de moi mais vient de ce forum …

 #include  #include  #include  #include "clapack.h" #include "cblas.h" void invertMasortingx(float *a, unsigned int height){ int info, ipiv[height]; info = clapack_sgetrf(CblasColMajor, height, height, a, height, ipiv); info = clapack_sgesorting(CblasColMajor, height, a, height, ipiv); } void displayMasortingx(float *a, unsigned int height, unsigned int width) { int i, j; for(i = 0; i < height; i++){ for(j = 0; j < width; j++) { printf("%1.3f ", a[height*j + i]); } printf("\n"); } printf("\n"); } int main(int argc, char *argv[]) { int i; float a[9], b[9], c[9]; srand(time(NULL)); for(i = 0; i < 9; i++) { a[i] = 1.0f*rand()/RAND_MAX; b[i] = a[i]; } displayMatrix(a, 3, 3); return 0; } 

Je suis sur Suse 12.3 64bits. Dans / usr / lib64 j’ai liblapack.a liblapack.so, … et libblas.a libblas.so, … et libgfortran.so.3

Le même code sans la fonction “invertMasortingx” (celle qui utilise la bibliothèque) comstack bien.

Une idée ou une suggestion?

Merci à tous pour votre aide.

Vava

Je suis tout à fait convaincu que vous devez également créer un lien vers libcblas, qui est la bibliothèque c wrapper de libblas. Notez que libblas est une bibliothèque FORTRAN qui ne contient donc pas la fonction clapack_ * que vous appelez.

Je viens de travailler sur FreeBSD avec:

 gcc -o test test.c \ -llapack -lblas -lalapack -lcblas 

J’avais installé math / atlas (depuis les ports) et les packages lapack et blas.

Voir ma question ici