C 缺少头文件时链接到BLAS

C 缺少头文件时链接到BLAS,c,gcc,blas,C,Gcc,Blas,我正在尝试用C语言编译一个程序,它使用BLAS接口处理线性代数。系统在/usr/lib64/libblas.*(.a和.so文件)中有BLAS库,但在/usr/include中没有cblas.h。我尝试在本地复制头并编译以下简单程序: #include <stdio.h> #include <cblas.h> int main() { double foo[] = {1.1,1.2,1.3}; printf("Vector norm: %g\n",cbla

我正在尝试用C语言编译一个程序,它使用BLAS接口处理线性代数。系统在
/usr/lib64/libblas.*
.a
.so
文件)中有BLAS库,但在
/usr/include
中没有
cblas.h
。我尝试在本地复制头并编译以下简单程序:

#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 ));
}
但是获取错误
对“cblas\u dnrm2”的未定义引用

如何正确链接提供的库


更新:如果我尝试链接到
/usr/lib64/atlas
中的
libcblas.so.3
libcblas.so.3.0
,如下所示:

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


我得到错误
/usr/bin/ld:找不到-lcblas
。同样,它可以很好地找到头文件,但没有找到共享库对象。

gcc似乎在查找
.a
.so
文件,而不是
.so.3
文件。解决方法如下:

gcc blas_test.c -L /usr/lib64/atlas -l :libcblas.so.3 -I.

尝试将
更改为
“cblas.h”
,并将其放入与blas_test.c相同的文件夹中。c
用于系统路径,则您不需要
-I。
如果这样做,我会收到相同的错误。编译器发现
cblas.h
很好,问题是它没有链接到那里的库。我是否链接到正确的库?我应该链接到
libcblas.so
而不是
libblas.so
?很高兴你解决了这个问题。把你最后的评论写在回答中,接受它,这样这个问题就结束了。我会投票的。
gcc blas_test.c -L /usr/lib64/atlas -l :libcblas.so.3 -I.