質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

3091閲覧

BLASをインストールしてC言語でdgemm関数を使いたい

nakajima_19

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/10/25 08:35

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です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

BLASはFORTRAN用のライブラリなので、C言語から直接使うことはできません。

CBLASをインストールして、ソース中で

C

1#include <cblas.h>

を行い、リンク時に以下のオプションが必要です。

-lcblas -lblas

CBLAS 使ってみたを読んでみてください。

投稿2021/10/25 13:33

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ヘッダファイルを#includeする必要があるのではないでしょうか。

投稿2021/10/25 09:00

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問