Execução de executáveis ARM (EL) no sistema ARM (HF) - Ligação simbólica ausente para o carregador dinâmico?

5

Estou usando uma distribuição Ubuntu 12.10 (ARMHF) em um quadro de panda. Eu quero executar aplicativos compilados para o ARMEL. Não foi possível devido a uma alteração na localização do carregador dinâmico ( link )

Consegui criar o seguinte link simbólico /lib/ld-linux.so.3 - > /lib/ld-linuxarmhf.so.3

Existe uma maneira de instalar um pacote de portabilidade? Existe uma razão pela qual isso não é feito pela distribuição?

Obrigado antecipadamente

    
por Uhli 05.12.2012 / 10:53

2 respostas

1

O vinculador dinâmico é cozido em tempo de compilação. para ver qual linker dinâmico está sendo usado. readelf -l /usr/bin/foo | grep Request

A única maneira de mudar isso é ajustar os arquivos de especificação do gcc. Veja gcc -dumpspecs | grep ld-linux . Ou passando o sinalizador --dynamic-linker para o vinculador no momento da compilação com algo como gcc -Wl,--dynamic-linker,/lib/ld-linux.so.3 foo.c

No entanto, nada disso é necessário se o conjunto de ferramentas estiver configurado corretamente e você realmente não deve mexer com ele, a menos que você realmente tenha uma razão para isso.

Em suma, a sua solução é provavelmente a melhor, no entanto, eu tentaria encontrar o pacote armhf e usá-lo, se possível, ou reconstruir o pacote.

    
por strings 08.01.2013 / 23:31
0

Talvez esse pacote de compatibilidade não exista (com a finalidade de executar binários armhf de terceiros que esperam /lib/ld-linux.so.3 em vez do novo padrão, concordou com /lib/ld-linuxarmhf.so.3 , certo?) porque esse pacote (se instalado) daria uma "falsa promessa" para se adequar a todos os binários do armel. Mas o vinculador dinâmico armhf deve quebrar binários do armel porque as ABIs são incompatíveis, se eu entendi isso corretamente. (Nesse caso, a solução correta seria agrupar os poucos binários armhf não-padrão especiais para que a localização esperada do vinculador dinâmico seja adaptada para o sistema ou regravar esse valor nos binários. Se isso for possível. Então isso não causará nenhum problema quando você tentar executar binários reais do armel.)

Por outro lado, se você deseja executar binários reais de armel em um sistema armhf, basta acessar " multiarch " (e, portanto, use um linker real de armel dinâmico, em vez de seu link simbólico!): instale os pré-requisitos do armel para seus binários do armel. Entre os pré-requisitos, libc6:armel ou algo parecido (corrija o nome do pacote se eu estiver errado, por favor) certamente incluiria o /lib/ld-linux.so.3 necessário.

(Em relação à incompatibilidade das ABIs: Como eu poderia entender, em armhf, argumentos de ponto flutuante são passados diretamente em registradores de ponto flutuante, enquanto em armel, eles são passados em registradores inteiros. Essa indirecção adiciona custo extra para ARM que suportam ponto flutuante, é por isso que o armhf é melhor para o ARM moderno.)

    
por imz -- Ivan Zakharyaschev 08.01.2013 / 23:45