我试图使用Linux-GCC中的以下编译命令生成两个矩阵的点积:
gcc -L / usr / lib64 / atlas -lblas code.c
这里的代码似乎编译没有错误:
#include < stdio.h>
int main()
{
int n,incx,incy;
int x[] = {1,2,3};
int y[] = {2,3,4};
int z;
incx =1;
incy =1;
n = 3;
z = sdot_(&n, x, &incx, y, &incy);
printf("%d", z);
printf("\n");
return 0;
}
所以我希望看到1 * 2 + 2 * 3 + 3 * 4 = 20,但是当我运行二进制时,结果&#34; 3&#34;打印出来。
有什么想法吗?
答案 0 :(得分:5)
您使用错误的类型和sdot_
的隐式声明。您应该添加函数原型(或包含标题)并使用正确的类型。
#include <stdio.h>
float sdot_(int* n, float* x, int* incx, float* y, int* incy);
int main()
{
int n,incx,incy;
float x[] = {1.f,2.f,3.f};
float y[] = {2.f,3.f,4.f};
float z;
incx =1;
incy =1;
n = 3;
z = sdot_(&n, x, &incx, y, &incy);
printf("%f", z);
printf("\n");
return 0;
}
如果启用警告,您将从编译器获取它们的代码版本:
cc sdot.c -lblas -Wall
sdot.c: In function ‘main’:
sdot.c:14:3: warning: implicit declaration of function ‘sdot_’ [-Wimplicit-function-declaration]