「cblas_sscalがない」と言われたとき
先日Nimでneoというパッケージを使ったプログラムを動かそうとしたとき、コンパイルまでは通ったのだが、実際に実行しようとしたら以下のエラーが出てハマった。
$ cat src/ai2 import neo let m = randomMatrix(3, 7) echo m $ nimble build $ ./ai2 could not import: cblass_sscal # ←エラー $
調べてみると、cblas_sscal
とは線形代数演算ライブラリBLASの一部らしい。さらに調べてみるとBLASにはいろんな種類があり、どの種類をインストールしたらよいか迷ったが今回はatlas
というライブラリをyum
でインストールした。実は他の種類blas
やlapack
もインストールしてみたのだが、これらにはcblas_sscal
が入っていなかった。
解決策
atlasとlapackをyumでインストール
$ sudo yum install atlas atlas-devel $ sudo yum install lapack
defineオプションを追加して再ビルド
$ nimble build --define:blas=tatlas
この--define:blas=tatlas
がミソ。このオプションはnimblas
というパッケージで使用されている。cblass_sscal
は私のCentos7.5には/usr/lib/atlas/libtatlas.so.3.10
の中に入っていることが分かったため、このような形になった。
結果
今度はうまく動作した。
$ ./ai2 [ [ 0.2326961497609559 0.9894961846897405 0.5936563635008223 0.8244128746481869 0.04526972974926768 0.2417286976201536 0.2114615988047588 ] [ 0.8228467011541094 0.4437264946689483 0.195534693152861 0.6844019291752474 0.9574039031918617 0.4352774127669565 0.438158530187601 ] [ 0.3333379470197706 0.07581602342631522 0.5258890850057507 0.4899364645980169 0.1510872370471941 0.6537294148212911 0.8833919949505109 ] ] $
参考
- #nim logs for 13-02-2018 - IRC Logs ... 17時10分前後の会話
- Neo - A Matrix library ... Nimの線形代数演算ライブラリ
追記(2018-06-18)
別のLinuxで今回のブログを検証した結果、lapackというライブラリも必要なことがわかったので、lapackをyumでインストールする部分を追加した。