/usr/lib/libblas.so.3: símbolo indefinido: gotoblas

2

Estou trabalhando em uma máquina remota via ssh e não tenho permissões sudo . Atualmente, estou tentando executar um projeto python que importa o framework keras. Devido a uma versão antiga do openblas eu fui forçado a compilar manualmente a versão atual do Openblas clonando este projeto . Apesar de Keras não lutar mais com bibliotecas antigas, um novo problema ocorreu quando o python atingiu essa linha:

from sklearn.model_selection import GridSearchCV

Eu recebo o erro /usr/lib/libblas.so.3: undefined symbol: gotoblas .

Existem alguns problemas semelhantes, mas não posso simplesmente remover libopenblas-base como sugerido em algumas soluções devido à falta de permissões sudo.

Acho que consegui descobrir onde o problema está enraizado.

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

Como você pode ver, não há "gotoblas" definido na versão openblas instalada manualmente. Por essa razão, a exceção no título é lançada. No meu computador pessoal, recebo a seguinte saída:

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
  ....

Ali está! Alguém pode me explicar como instalar manualmente o OpenBlas de modo que o erro superior não ocorra mais? Aparentemente, apenas uma pequena peça é instalada ao compilar o OpenBlas manualmente. Seu diretório contém os seguintes arquivos:

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
    
por null 07.02.2017 / 10:48

1 resposta

0

Talvez você tenha duas versões de libblas. Você pode tentar selecionar outra biblioteca instalada em seu sistema assim:

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

Mas se você não tiver permissões, terá que alterar seu arquivo .bashrc e modificar as variáveis de ambiente LD_LIBRARY_PATH e possivelmente PYTHONPATH.

Tente:

locate libbas.so.3

Para ver se há mais versões dessa biblioteca em seu sistema, use seu caminho e anexe-o ao seu .bashrc como:

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

Eu não tentei ... deixe-me saber se funciona.

    
por Marcus 24.05.2018 / 13:41