環境
- macOS Big Sur 11.1
- MacBook Air (M1, 2020)
- Command Line Tools 12.3
- Rosetta 2 使用
- homebrewで入れたgcc (gfortran)
2021年1月20日 追記
研究用で新しくMacbook Airを買ってgfortranでコンパイルしてみたら
下記のパスのエラーは起こらなかった.LAPACKも特に何もしなくても-llapack
で問題なく使える.
コンパイルエラー
gfortranを使ってfortranのプログラムをコンパイルしようとしたら下記のエラー
ld: library not found for -lSystem
Big Surではなぜかライブラリにパスが通ってないらしい.gfortranだけではなくgccなどでも同じエラーが出る.
めんどくさいが,コンパイルするときにライブラリのパスを指定する.
-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
これでコンパイルできた.
LAPACK
MacではBLASやLAPACKはデフォルトでAccelerate frameworkに含まれていて,これまでのMac OSでは確か何もしなくてもデフォルトでパスが通ってLAPACKなどが使えたはず.Big Surでは上記問題で
-llapack
だけではコンパイルできなかった.
-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -llapack
パスを指定すればLAPACKが使えてコンパイルが通った.
ライブラリの実態?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
を調べてみるとliblapack.tbd
というファイルがあって中身を見ると,
install-name: '/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib'
ライブラリが置いてある実際の場所が書いてある.この場所を見に行ってみてもlibLAPACK.dylib
というライブラリが見つからない.Big Surより前のOSでは確かにこの場所にLAPACKとかBLASのライブラリが置いてある.以前のOSではそれらのライブラリのシンボリックリンクが/usr/lib
に置いてあった./usr/lib
は何も設定しなくてもライブラリを読みに行ってくれるディレクトリだったはず.
Big Surでライブラリファイルが見つからないのになぜかコンパイルはうまく行って,できた実行ファイルをotool -L
で調べてみると下記のlibLAPACK.dylib
がリンクされている.
/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
ファイルがないのにちゃんと動いているのが謎.