A mensagem No such file or directory
não se refere ao seu arquivo executável: a.out
. Em vez disso, ele se refere a um programa auxiliar necessário para executar o executável de 32 bits vinculado dinamicamente a.out
.
Agora, encontrei tudo isso muito bem explicado neste artigo:
- Sobre a execução Programas de 32 bits em Ubuntu de 64 bits e bibliotecas compartilhadas
Ligação estática e dinâmica
Existem dois tipos de executáveis binários: estaticamente vinculados e vinculados dinamicamente. Primeiro sobre os estaticamente ligados : quando um programa quer chamar uma função de biblioteca, refere-se a ela pelo nome. Ao construir o programa a partir da fonte, todas as funções da biblioteca usadas o programa é copiado da biblioteca para o programa. O programa em seguida, contém seu próprio código, bem como o código da biblioteca funções que usa. Então, nos lugares de chamada, o nome é alterado para o endereço da função correspondente no programa. Este processo é chamado ligando porque liga o nome de uma função com a própria função, sua implementação. É chamado estático , porque o link não pode ser alterado depois que o programa foi construído.
Programas dinamicamente ligados funcionam de forma diferente: o programa também se refere às funções da biblioteca pelo nome. Ao construir o programa, duas listas são reunidos e armazenados em conjunto com o programa: uma lista dos quais funções de biblioteca são usadas em quais lugares, e uma lista dos bibliotecas que contêm as funções usadas pelo programa. Isso é tudo para construir o programa.
Mais tarde, no tempo de execução , um programa especial de ajuda, o chamado vinculador dinâmico, procura em locais específicos no sistema de arquivos para cada biblioteca na lista de bibliotecas e carrega-a na memória. Agora a dinâmica linker sabe em que endereços de memória as funções da biblioteca são acessível. Usa a primeira lista para escrever o endereço correto em todos lugares que chamam funções de biblioteca. Então o link dinamicamente programa pode ser executado.