我正在尝试在C中编译一个使用BLAS接口进行线性代数的程序。系统在/usr/lib64/libblas.*
(.a
和.so
个文件中包含BLAS库,但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
。再次,它找到头文件就好了,但找不到共享库对象。
答案 0 :(得分:1)
gcc似乎会查找.a
和.so
个文件,但不会查找.so.3
个文件。解决了以下问题:
gcc blas_test.c -L /usr/lib64/atlas -l :libcblas.so.3 -I.