我正在通过远程机器工作远程控制和没有 sudo 权限。目前,我正在尝试运行一个导入 keras 框架的 python 项目。由于开放布拉斯我被迫通过克隆来手动编译当前版本的 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
答案1
也许您有两个版本的 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>
我没有尝试过...如果有效请告诉我。