Ссылка на BLAS при отсутствии заголовочного файла

Я пытаюсь скомпилировать программу на C, которая использует интерфейс BLAS для линейной алгебры. В системе есть библиотеки BLAS в /usr/lib64/libblas.* (файлы .a и .so), но нет cblas.h в /usr/include. Я попытался скопировать заголовок локально и скомпилировать следующую простую программу:

#include <stdio.h>
#include <cblas.h>
int main() {
    double foo[] = {1.1,1.2,1.3};
    printf("Vector norm: %g\n",cblas_dnrm2 ( 3, foo, 1 ));
}

с опциями

gcc blas_test.c -L/usr/lib64 -lblas -I.

но получаю ошибку undefined reference to 'cblas_dnrm2'

Как правильно связать предоставленную библиотеку?


Обновление: если я попытаюсь связать libcblas.so.3 или libcblas.so.3.0 в /usr/lib64/atlas вот так:

gcc blas_test.c -L/usr/lib64/atlas -lcblas -I.

Я получаю ошибку /usr/bin/ld: cannot find -lcblas. Опять же, он отлично находит заголовочный файл, но не находит объект общей библиотеки.


person David P    schedule 29.01.2014    source источник
comment
Попробуйте изменить <cblas.h> на "cblas.h" и поместите его в ту же папку, что и blas_test.c <> для системного пути, тогда вам не нужен -I.   -  person Fredrik Pihl    schedule 29.01.2014
comment
Я получаю ту же ошибку, если я это сделаю. Компилятор находит cblas.h в порядке, проблема в том, что он не связывается с библиотеками, которые там есть. Я ссылаюсь на правильную библиотеку? Должен ли я ссылаться на libcblas.so вместо libblas.so?   -  person David P    schedule 29.01.2014
comment
Рад, что вы решили это. Поместите свой последний комментарий в ответ и примите его, чтобы этот вопрос был закрыт. Я проголосую.   -  person Fredrik Pihl    schedule 30.01.2014


Ответы (1)


Кажется, что gcc ищет файлы .a и .so, но не файлы .so.3. Решено со следующим:

gcc blas_test.c -L /usr/lib64/atlas -l :libcblas.so.3 -I.
person David P    schedule 30.01.2014