Seus links simbólicos não funcionarão porque você está criando um link para uma biblioteca i386 em um caminho que é comumente procurado por bibliotecas amd64. Executáveis compilados para uma arquitetura (amd64) não podem carregar bibliotecas compartilhadas compiladas para outra arquitetura (i386).
Você pode ser capaz de enganar o Stata para usar libpng16 ao invés de libpng12 se você garantir que é para a mesma arquitetura como o próprio arquivo Stata. Suponho que o último é para amd64 (considerando que a mensagem de erro reclama de uma classe ELF inválida ELFCLASS32
, que é usada apenas para conjuntos de instruções i386).
Parece que o Stata verifica explicitamente a versão libpng, portanto o truque descrito acima e, portanto, as duas soluções que estão sendo desenvolvidas a seguir não funcionarão. Consulte a Better Solution em seu lugar.
Solução rápida e suja
Mascarar libpng16.so.16
as libpng12.so.0
para todos executáveis amd64:
sudo ln -sfT libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng12.so.0
Ainda sujo, mas com menos surpresas futuras
Mascarar libpng16.so.16
como libpng12.so.0
apenas para executáveis selecionados (eliminando assim o risco de que outros aplicativos captem o falso libpng12.so.0
por engano):
-
Crie um diretório para bibliotecas compartilhadas "masquerade", e. g .:
sudo mkdir -p /usr/local/lib/stata/shared-library-hack
-
Coloque um link simbólico na biblioteca compartilhada mascarada:
sudo ln -s /usr/lib/x86_64-linux-gnu/libpng16.so.16 /usr/local/lib/stata/shared-library-hack/libpng12.so.0
-
Execute o programa com um caminho de pesquisa da biblioteca modificada:
LD_LIBRARY_PATH=/usr/local/lib/stata/shared-library-hack [COMMAND] [ARGUMENTS...]
Ou se você quiser reter alterações potencialmente existentes no caminho de pesquisa da biblioteca:
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+"${LD_LIBRARY_PATH}:"}/usr/local/lib/stata/shared-library-hack" [COMMAND] [ARGUMENTS...]
Se você não quiser digitar um comando tão longo toda vez que iniciar um aplicativo desse tipo, poderá usar um wrapper de script de shell ou editar a descrição inicial do aplicativo (ou seja, a sub-rotina
Exec=
no arquivo.desktop
) adequadamente.
Melhor solução
Instale realmente libpng12.so.0
. A maneira mais fácil é baixar e instalar o pacote Deb de uma versão anterior do Ubuntu:
-
Vá para link , escolha um espelho e baixe o arquivo do pacote.
-
Use seu gerenciador de pacotes favorito para instalar o arquivo de pacotes.
Na linha de comando, você pode usar:
sudo apt install [DOWNLOAD-PATH]/libpng12-0_*_amd64.deb
(Substitua
[DOWNLOAD-PATH]
pelo caminho usado anteriormente como o diretório de destino do download).
This is not a proper solution, because updates to
libpng12
, including security updates, will not be automatically installed, so doing this introduces a security risk. – fkraiem Dec 8 '17 at 4:36