Versão resumida:
Instalado o Ubuntu Touch, e notou que não há /lib/ld-linux.so.3
vinculador dinâmico (link simbólico ou outro). Primeira vez que vi isso faltando em uma instalação do Linux. Existe algum motivo particular para isso não estar lá?
Versão longa:
Acabei de instalar o Ubuntu Touch (13.10, estável) em um Nexus 7 de primeira geração e quero testar uma compilação voltada para o ARM nele.
Instalei o pacote gcc-arm-linux-gnueabi
no meu desktop Ubuntu (12.04, incidentalmente) e compilei um simples "hello world" em C, copiei-o para o Nexus, ssh
'd in e executei o executável ( %código%). A resposta foi:
-bash: ./nexustest: No such file or directory
Por fim, descobri que isso acontecia porque o Ubuntu não estava conseguindo carregar o nexustest
vinculador dinâmico. Como de costume em um executável Linux não-estaticamente vinculado, ld-linux.so
mostra que está procurando por ldd nexustest
, e a instalação do Ubuntu Touch não tem isso.
Eu posso "consertar" isso com qualquer um dos seguintes, caso em que o "hello world" é executado como esperado:
-
Copiando ou criando links simbólicos /lib/ld-linux.so.3
para /lib/ld-linux-armhf.so.3
- sugerindo que /lib/ld-linux.so.3
é o vinculador dinâmico correto
-
Compilando (vinculando) o executável com ld-linux-armhf.so.3
- sugerindo que -static
esteja usando o vinculador / arco correto
Da perspectiva de vinculação do GCC e do Linux, tudo parece estar funcionando como esperado, exceto pelo fato de que não há arm-linux-gnueabi-gcc
no meu Nexus 7 (o que espero seria um link simbólico para /lib/ld-linux.so.3
). Por que é que? A omissão é um erro ou alguma decisão intencional de distro-design que eu não estou entendendo?