OSX の BLAS 実装に対してリンクしようとしています (好奇心旺盛な方のために) が、netlib から独自の LAPACK ビルドを使用したいので、同じディレクトリに/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
リンクしたくありません。libLAPACK.dylib
より最近で最新のもの。
私の問題は、通常 LAPACK ライブラリに格納されている BLAS ライブラリにシンボルがあり、そのため名前の競合が発生していることです。具体的な例として、spotrf
関数は次のように定義されていlibBLAS.dylib
ます。
$ nm /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib | grep spotrf
0000000000010c05 T $ld$hide$os10.7$_spotrf
0000000000010c05 T $ld$hide$os10.8$_spotrf
000000000000746e T _spotrf
これらの最初の 2 つの記号は少し怪しいと思ったので、再確認するために、以下も確認しlibLAPACK.dylib
ます。
$ nm /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib | grep spotrf
00000000000010c8 T $ld$hide$os10.4$_spotrf
00000000000010c8 T $ld$hide$os10.5$_spotrf
00000000000010c8 T $ld$hide$os10.6$_spotrf
000000000000765b T _spotrf
私が見つけた限られた情報から、このプレフィックスは、ユーザーが特定の OSX バージョンに対してコンパイルしている場合、動的リンカーにこれらのシンボルを無視するように指示しているようです。libBLAS.dylib
Apple がシンボルをlibLAPACK.dylib
10.6 から 10.7 の間に移動した場合、これは理にかなっています。
spotrf
私の質問は、内部にあるなどを非表示にする必要があることをダイナミックリンカーにどのように通知できlibBLAS.dylib
ますか?