BLASをインストールしてC言語でdgemm関数を使いたい
実行した手順を記しておきます。
0. NetlibのサイトからBLAS(blas-3.10.0.tgz)をダウンロード
0. tar xzvf blas-3.10.0.tgz
0. cd BLAS-3.10.0
0. make
0. cp blas_LINUX.a /usr/local/lib/libblas.a
です。
発生している問題・エラーメッセージ
t_blas1.c:26:2: error: implicit declaration of function 'dgemm_' is invalid in C99 [-Werror,-Wimplicit-function-declaration] dgemm_(&transa, &transb, &n, &n, &n, &alpha, A, &n, B, &n, &beta, C, &n); ^ 1 error generated.
該当のソースコード
c
1#include <stdio.h> 2 3double A[4], B[4], C[4]; 4 5int main(void) 6{ 7 int n = 2; 8 char transa = 'N', transb = 'N'; 9 double alpha = 1.0, beta = 0.0; 10 11 A[0] = 1.0; A[2] = 2.0; 12 A[1] = 3.0; A[3] = 4.0; 13 B[0] = 5.0; B[2] = 6.0; 14 B[1] = 7.0; B[3] = 8.0; 15 16 printf("A =\n"); 17 printf("%8.2f%8.2f\n", A[0], A[2]); 18 printf("%8.2f%8.2f\n", A[1], A[3]); 19 20 printf("B =\n"); 21 printf("%8.2f%8.2f\n", B[0], B[2]); 22 printf("%8.2f%8.2f\n", B[1], B[3]); 23 24 /* BLAS/DGEMM */ 25 dgemm_(&transa, &transb, &n, &n, &n, &alpha, A, &n, B, &n, &beta, C, &n); 26 printf("C =\n"); 27 printf("%8.2f%8.2f\n", C[0], C[2]); 28 printf("%8.2f%8.2f\n", C[1], C[3]); 29 30 return 0; 31} 32
試したこと
最初はコンパイルを
gcc -O2 blas.c -framework vecLib
としていましたが、
gcc -O2 blas.c -lblas
も試してみました。
結果は全く同じエラーでした。(オプションが全くなくても同じエラーでした。)
補足情報(FW/ツールのバージョンなど)
使用しているマシンは
プロセッサがIntel Core i7のMacBook Proです。
下記の「回答」の、「面倒なほう」と書かれてるところが参考になると思います
https://ja.stackoverflow.com/questions/54999/gcc%E3%81%A7%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E6%99%82%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E6%84%8F%E5%91%B3%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84
http://azalea.s35.xrea.com/blas/blas.h
をインクルードしてみてください
参考
http://azalea.s35.xrea.com/blas/use.html
の「呼び出し方」