web-dev-qa-db-ja.com

/usr/lib/libblas.so.3:未定義のシンボル:gotoblas

sshを介してリモートマシンで作業していますが、Sudo権限がありません。現在、私はpythonプロジェクトを実行しようとしています。古いバージョンのopenblasが原因で) this プロジェクトを複製することにより、Openblasの現在のバージョンを手動でコンパイルすることを余儀なくされました。Kerasは古いライブラリでもう苦労していませんが、pythonがこの行にヒットすると、新しい問題が発生しました:

from sklearn.model_selection import GridSearchCV

エラー/usr/lib/libblas.so.3: undefined symbol: gotoblas

そこにはいくつかの同様の問題がありますが、単に削除することはできませんlibopenblas-base Sudo権限がないため、一部のソリューションで提案されているとおり。

問題の原因がどこにあるのかを理解できたと思います。

readelf -Ws /home/me/lib/lib/libopenblas.so.0 | grep gotoblas
  1019: 0000000000283b20   256 FUNC    GLOBAL DEFAULT   11 gotoblas_pthread
  2556: 000000000007f200    29 FUNC    GLOBAL DEFAULT   11 gotoblas_quit
  2576: 000000000007f220    76 FUNC    GLOBAL DEFAULT   11 gotoblas_init
  2597: 0000000000faffd0     4 OBJECT  LOCAL  DEFAULT   24 gotoblas_initialized
  9916: 0000000000283b20   256 FUNC    GLOBAL DEFAULT   11 gotoblas_pthread
 10873: 000000000007f220    76 FUNC    GLOBAL DEFAULT   11 gotoblas_init
 13330: 000000000007f200    29 FUNC    GLOBAL DEFAULT   11 gotoblas_quit

ご覧のように、手動でインストールされたopenblasバージョンでは「gotoblas」は定義されていません。そのため、タイトルの例外がスローされます。私のパソコンでは、次の出力が得られます。

readelf -Ws /usr/lib/libopenblas.so.0 | grep gotoblas
  ....
  6146: 0000000002089d30     8 OBJECT  GLOBAL DEFAULT   25 gotoblas
  6779: 000000000206c240  3992 OBJECT  GLOBAL DEFAULT   24 gotoblas_DUNNINGTON
  ....

そこにそれがある!誰かがOpenBlasを手動でインストールして、上部のエラーが発生しないようにする方法を教えてもらえますか?どうやら、OpenBlasを手動でコンパイルするときにインストールされるのはごく一部です。そのディレクトリには、次のファイルが含まれています。

ls /home/me/lib/lib/
cmake  libopenblas.a  libopenblas.so  libopenblas.so.0  libopenblas_sandybridgep-r0.2.19.a  libopenblas_sandybridgep-r0.2.19.so
3
null

多分あなたは2つのバージョンのlibblasを持っています。次のように、システムにインストールされている別のライブラリを選択してみることができます。

update-alternatives --config libblas.so.3 
update-alternatives --config liblapack.so.3

ただし、権限がない場合は、.bashrcファイルを変更して、LD_LIBRARY_PATHおよび場合によってはPYTHONPATH環境変数を変更する必要があります。

試してください:

locate libbas.so.3

このライブラリのバージョンがシステムにあるかどうかを確認し、そのパスを使用して、次のように.bashrcに追加します。

export LD_LIBRARY_PATH=<your library path, without file name>:$LD_LIBRARY_PATH
export LD_PRELOAD=<your library path>

私は試しませんでした...それが機能するかどうかを知らせてください。

1
Marcus