Não é possível executar um programa de 32 bits na VM de 64 bits

11

Eu compilei um pequeno programa C "hello world" no Ubuntu 10.04 32 bit machine. Então eu coloquei o executável (a.out) na máquina virtual VMWare Ubuntu 12.10 (64 bits) e tentei executá-lo (./a.out). O SO não identifica o arquivo e diz "Nenhum arquivo ou diretório". Mas quando eu coloco o mesmo executável em um Ubuntu 12.10 (64 bits) rodando em um laptop de 64 bits, ele funciona bem e eu recebo a saída desejada. A VM está sendo executada em servidores IBM Blade. Eu queria saber por que os resultados de uma VM?

    
por Jay 30.09.2013 / 13:31

1 resposta

19

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.

    
por Radu Rădeanu 04.10.2013 / 08:54