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?