Por que as bibliotecas do pacote boost estão instaladas em / usr / lib / x86_64-linux-gnu?

6

Depois de executar

sudo apt-get install libboost-all-dev

no ubuntu 14.04 amd64 desktop (Trusty Tahr), descobri que todas as libs estão instaladas em

/usr/lib/x86_64-linux-gnu/

em vez de

/usr/lib/

Embora todos os cabeçalhos ainda estejam instalados em

/usr/include/

Por que isso acontece?

    
por WiSaGaN 18.04.2014 / 02:38

2 respostas

8

Os pacotes da biblioteca foram criados multiarch, o que significa que você pode instalar simultaneamente a versão amd64 e a versão i386 em um computador amd64. Se você deseja instalar a versão i386 de uma biblioteca, sufixe o nome do pacote com :i386 . (Por exemplo, sudo apt-get install libboost-system1.54.0:i386 )

Os pacotes de bibliotecas estão se tornando multiarch, de modo que é um pouco mais fácil instalar pacotes de outras arquiteturas e executar programas compilados para outras arquiteturas.

    
por saiarcot895 18.04.2014 / 02:48
2

Isso é por especificação. Os cabeçalhos ainda são um problema não resolvido na especificação. e considerado fora do escopo, conforme observado na fonte sob o título de Problemas não resolvidos

"Design

Layout do sistema de arquivos

Para acomodar facilmente mais de uma ELF ABI em um sistema, a biblioteca para cada par (soname, ABI) deve ter um caminho único no sistema de arquivos. O FHS tenta resolver isso para o caso amd64 exigindo que / usr / lib seja reservado para bibliotecas de 32 bits, com bibliotecas de 64 bits localizadas em / usr / lib64. Este projeto tem várias deficiências:

Isso não é compatível com versões futuras de qualquer alteração da ABI, o que exigiria mais trabalho de design e modificação adicional de pacotes para lidar com a adição de novos caminhos. (De fato, isso já é uma preocupação para a arquitetura MIPS que tem três ABIs distintas em uso em paralelo.)

A arquitetura amd64 deve ter um envelope especial no pacote da biblioteca, como a única arquitetura que usa / usr / lib64 em vez de / usr / lib. (Duas portas Linux de 64 bits preexistentes, Alpha e IA-64, também usaram / usr / lib para suas bibliotecas de 64 bits.) Isso é uma complexidade adicional desnecessária.

Ele não aborda casos de uso de emulação, como o qemu, que poderiam se integrar de forma muito melhor e mais eficiente com o sistema se os pacotes de um qemu arch fossem co-instaláveis.

O design atual usado pelo Debian e pelo Ubuntu também falha em um ponto-chave onde o layout do FHS não:

O caminho das bibliotecas x86 e x86-64 varia dependendo se o sistema é de 32 ou 64 bits, portanto, a conversão de caminhos no momento da instalação é insuficiente para o caso geral, pois algumas bibliotecas precisam incorporar caminhos de plug-in no sistema. próprios binários.

O Multiarch procura resolver todos esses problemas, às custas de uma transição única, migrando bibliotecas para subdiretórios que incluem o trio de arquitetura como parte do caminho:

/ lib / i386-linux-gnu    / lib / x86_64-linux-gnu    / usr / lib / i386-linux-gnu    / usr / lib / x86_64-linux-gnu "

fonte

    
por Elder Geek 13.05.2014 / 04:51