Esta es la primera vez que intento usar ATLAS. No puedo vincularlo correctamente. Aquí es un programa muy simple sgemm:ATLAS gemm linking undefined reference to 'cblas_sgemm'
...
#include <cblas.h>
const int M=10;
const int N=8;
const int K=5;
int main()
{
float *A = new float[M*K];
float *B = new float[K*N];
float *C = new float[M*N];
// Initialize A and B
cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, 1.0, A, K, B, N, 0.0, C, N);
...
}
Cuando compilo en una plataforma Linux con la instalación estándar de ATLAS, da error al vincular:
g++ test.c -lblas -lcblas -latlas -llapack
/tmp/cc1Gu7sr.o: In function `main':
test.c:(.text+0x29e): undefined reference to `cblas_sgemm(CBLAS_ORDER, CBLAS_TRANSPOSE, CBLAS_TRANSPOSE, int, int, int, float, float const*, int, float const*, int, float, float*, int)'
collect2: ld returned 1 exit status
Como se puede ver, he intentado dar diferentes combinación de bibliotecas, pero no ayudó. ¿Qué estoy haciendo mal?
Es probable que sea el caso, pero me sorprende que '' no ya cuentan con este guardia. –
Gracias. No pensé en eso, ya que es bastante común tener este guardia ahora en las bibliotecas. De todos modos, simplemente haciendo extern "C" lo hizo funcionar. – usman