Como construir meu código para rodar em um sistema linux sem suporte a vdso

0

Eu tenho um pequeno programa em C ++ que estou compilando em uma máquina Ubuntu. O programa funciona bem na mesma máquina, mas quando eu copio e tento rodar em um sistema linux diferente ele imprime

./progr1: Não existe tal arquivo ou diretório.

Além disso, percebi que o suporte a VDSO (linux-vdso.so.1) não está habilitado no kernel em execução na máquina de destino do Linux.

Abaixo está a saída do ldd do programa da minha máquina linux.

linux-vdso.so.1 =>  (0x00007fffda425000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6ce9114000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6ce8efe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6ce8b38000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6ce8832000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6ce9432000)

Agora eu quero saber como faço para compilar meu código no meu pc do Ubuntu para executar isso no alvo?

por prabhu 24.08.2016 / 12:16

1 resposta

0

linux-vdso.so não é uma biblioteca compartilhada normal. É uma biblioteca virtual que o kernel mapeia automaticamente para o espaço de endereçamento de cada processo para fornecer alguns syscalls sem uma alternância de contexto completa e para facilitar o syscalls em geral. Você pode ler mais na manpage (on-line aqui ). Como não é carregado a partir de um arquivo ldd não mostra um caminho, mas como mostra o endereço que foi mapeado, você pode ter certeza de que está carregado corretamente.

Como todas as bibliotecas são encontradas, o motivo mais provável é que o arquivo simplesmente não esteja marcado como executável ( chmod +x ).

    
por 24.08.2016 / 12:26