Я работаю над удаленной машиной через ssh и не имею sudo полномочий. В настоящее время я пытаюсь выполнить проект Python, который импортирует платформу криса. Из-за старой версии openblas я был вынужден вручную скомпилировать текущую версию 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
Поскольку Вы видите, что нет никакого "gotoblas", определенного во вручную установленной openblas версии. По этой причине исключение в заголовке выдается. На моем персональном компьютере я получаю следующий вывод:
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
Возможно, у Вас есть две версии 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>
Я не попробовал... сообщенный мне, если это работает.