[C] Problema linking librerie MKL

HeroGian
Salve,
sto cercando di compilare dei programmi C che utilizzano le librerie intel mkl_cblas e mkl_lapacke, il problema è che durante la compilazione, il linker mi restituisce questi errori:

/tmp/ccLyat4a.o: In function `armijo':
lmsd_mkl.c:(.text+0x388a): undefined reference to `cblas_dnrm2'
lmsd_mkl.c:(.text+0x3903): undefined reference to `cblas_daxpy'
lmsd_mkl.c:(.text+0x3937): undefined reference to `cblas_dnrm2'
lmsd_mkl.c:(.text+0x398b): undefined reference to `cblas_ddot'
/tmp/ccLyat4a.o: In function `main':
lmsd_mkl.c:(.text+0x4042): undefined reference to `cblas_dnrm2'
lmsd_mkl.c:(.text+0x410c): undefined reference to `cblas_daxpy'
lmsd_mkl.c:(.text+0x41c0): undefined reference to `cblas_dscal'
lmsd_mkl.c:(.text+0x42ce): undefined reference to `cblas_dnrm2'
lmsd_mkl.c:(.text+0x4300): undefined reference to `cblas_dnrm2'
lmsd_mkl.c:(.text+0x4348): undefined reference to `cblas_dnrm2'
lmsd_mkl.c:(.text+0x45cd): undefined reference to `cblas_dgemm'
lmsd_mkl.c:(.text+0x45f4): undefined reference to `LAPACKE_dpotrf'
lmsd_mkl.c:(.text+0x4847): undefined reference to `cblas_dgemv'
lmsd_mkl.c:(.text+0x4892): undefined reference to `LAPACKE_dtrtrs'
lmsd_mkl.c:(.text+0x49a8): undefined reference to `LAPACKE_dtrtri'
lmsd_mkl.c:(.text+0x4a20): undefined reference to `cblas_dgemm'
lmsd_mkl.c:(.text+0x4a92): undefined reference to `cblas_dgemm'
lmsd_mkl.c:(.text+0x4b75): undefined reference to `LAPACKE_dsterf'
collect2: error: ld returned 1 exit status


sembra che non trovi le librerie che gli passo; io compilo in questo modo:

gcc lmsd_mkl.c -o lmsd_mkl -lm -I/opt/intel/12.1.5/composer_xe_2011_sp1.11.339/mkl/include -L/opt/intel/12.1.5/composer_xe_2011_sp1.11.339/mkl/lib/intel64 -lmkl_core -lmkl_sequential -lmkl_intel_thread -ldl -lpthread


ed all'interno del file ho i seguenti include:

#include "/opt/intel/12.1.5/composer_xe_2011_sp1.11.339/mkl/include/mkl.h"
#include "/opt/intel/12.1.5/composer_xe_2011_sp1.11.339/mkl/include/mkl_cblas.h"
#include "/opt/intel/12.1.5/composer_xe_2011_sp1.11.339/mkl/include/mkl_lapacke.h"


grazie

Risposte
apatriarca
Non sono su linux in questo momento e usando principalmente icc per compilare con MKL devo controllare i comandi di compilazione specifica per gcc. Lo faccio più tardi.

Nel frattempo ti chiedo perché stai includendo il file specificando per intero il path se questo path è stato già aggiunto tra quelli presi in considerazione dal compilatore. Immagino comunque che il problema sia da ricercare nelle librerie che hai linkato. Probabilmente ne manca qualcuna. Esiste un tool online per aiutarti a trovare l'esatta linea di comando da usare qui.

HeroGian
grazie per la risposta,
per testare questi codici ho a disposizione un computer (non mio) che purtroppo non ha icc, o meglio è installato ma ci sono alcuni problemi con la licenza di utilizzo, quindi posso contare solo sul gcc.
Per quanto riguarda il path, purtroppo non ho mkl.h in /usr/include quindi dovrei includere i path assoluti.
Più tardi provo il tool online, grazie!

Raptorista1
apatriarca intendeva dire che una volta che specifichi
-I/opt/intel/12.1.5/composer_xe_2011_sp1.11.339/mkl/include
puoi mettere semplicemente
#include "mkl.h"
perché il compilatore va a cercare lì.

In linux dovresti avere il comando
nm
che cerca i nomi definiti all'interno di una libreria, una cosa tipo
nm *.a ?? cblas_ddot
.
Ad occhio direi che devi linkare una libreria mkl_cblas qualcosa.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.