2015-10-29 1 views
0

Je vais avoir du mal à relier un simple programme cblas, voici mon exemple minimal:référence non définie: Cblas ne liant pas

extern "C" 
{  
    #include <cblas.h> 
} 
#include <iostream> 

int main() { 

    int lda = 3; 

    float A[] = { 0.11, 0.12, 0.13, 
        0.21, 0.22, 0.23 }; 

    int ldb = 2; 

    float B[] = { 1011, 1012, 
        1021, 1022, 
        1031, 1032 }; 

    int ldc = 2; 

    float C[] = { 0.00, 0.00, 
        0.00, 0.00 }; 

    cblas_sgemm(CblasRowMajor, 
       CblasNoTrans, 
       CblasNoTrans, 
       2, 2, 3, 1.0, A, lda, B, ldb, 0.0, C, ldc); 

    std::cout << "[ " << C[0] << ", " << C[1] << "\n " << C[2] 
       << ", " << C[3] << " ]\n"; 
} 

Maintenant, je suis en train de compiler le programme avec g++ -lcblas test.cpp, mais cela me donne

[email protected]:~/Documents$ g++ -lcblas test.cpp 
/tmp/ccEwRr40.o: In function `main': 
test.cpp:(.text+0x112): undefined reference to `cblas_sgemm' 
collect2: error: ld returned 1 exit status 

ce qui signifie qu'il ne lie pas correctement. La partie étrange est que je faire ont les bibliothèques cblas, je les ai installés via atlas

[email protected]:~/Documents$ dpkg --get-selections | grep atlas 
libatlas-base-dev    install 
libatlas-dev     install 
libatlas3-base     install 

si vous regardez à l'intérieur /usr/lib je

[email protected]:/usr/lib$ ls | grep blas 
libblas 
libblas.a 
libblas.so 
libblas.so.3 
libblas.so.3gf 
libcblas.a 
libcblas.so 
libcblas.so.3 
libcblas.so.3gf 
libf77blas.a 
libf77blas.so 
libf77blas.so.3 
libf77blas.so.3gf 

Est-ce que quelqu'un sait pourquoi ce programme ne parvient pas à créer un lien?

Répondre

3

Je pense que l'argument -lcblas devrait venir après test.cpp.

+0

absolu classique: D – midor