Tentando executar ./programa [RESOLVIDO]

1. Tentando executar ./programa [RESOLVIDO]

Fred Melo
fredmelo

(usa Ubuntu)

Enviado em 06/11/2017 - 02:08h

Gosto da praticidade de usar meu pendrive com meus materiais de estudo em qualquer lugar!
Por exemplo: atualmente estou estudando Linguagem C.
ao tentar $ ou # /media/user/pendrive$ ./programa ...
O aviso bash: ./programa: Permissão negada , aparece no shell...
Sei que essa questão é recorrente mas não vi nada em lugar nenhum com uma solução razoável.
Tentei mudar o meu pendriver para FAT32...
Desde já agradeço!

<usa Ubuntu 16>


  


2. Re: Tentando executar ./programa

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/11/2017 - 05:06h

Provavelmente o problema é que o arquivo compilado não fica com permissão de execução quando é colocado no pendrive. Se o pendrive estiver formatado como FAT32 ou NTFS, as permissões normais do POSIX podem não estar disponíveis nos arquivos (o que é bom para evitar acidentes).

Para alguns (talvez não todos) executáveis compilados com bibliotecas dinâmicas, você pode executá-los passando como argumentos para o ld.so.

$ ls -l hello
-rw-r--r-- 1 paulo1205 users 8600 Nov 6 05:05 hello
$ ./hello
bash: ./hello: Permission denied
$ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ./hello
Hello, World.



3. Re: Tentando executar ./programa [RESOLVIDO]

Fred Melo
fredmelo

(usa Ubuntu)

Enviado em 10/11/2017 - 02:56h

paulo1205 escreveu:

Provavelmente o problema é que o arquivo compilado não fica com permissão de execução quando é colocado no pendrive. Se o pendrive estiver formatado como FAT32 ou NTFS, as permissões normais do POSIX podem não estar disponíveis nos arquivos (o que é bom para evitar acidentes).

Para alguns (talvez não todos) executáveis compilados com bibliotecas dinâmicas, você pode executá-los passando como argumentos para o ld.so.

$ ls -l hello
-rw-r--r-- 1 paulo1205 users 8600 Nov 6 05:05 hello
$ ./hello
bash: ./hello: Permission denied
$ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ./hello
Hello, World.


Nossa!! É disso que eu tava falando! Perfeito!! Muito obrigado meeeesmo! =]
.
Agora: o que é esse arquivo "ld-linux-x86-64.so.2" ??? Por que a execução dele libera a execução de uma programa em uma mídia externa?

<usa Ubuntu 16>


4. Re: Tentando executar ./programa

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/11/2017 - 19:02h

ld.so é o módulo que carrega as bibliotecas dinâmicas num executável que tenha sido gerado de modo a usar bibliotecas dinâmicas.

Quando você dispara um programa com bibliotecas dinâmicas, o sistema tem de chamar o ld.so de qualquer maneira, de modo a identificar quais as bibliotecas de que o programa depende, carregar tais bibliotecas, e resolver os endereços de cada objeto dinâmico que ainda não esteja mapeado por quem faz uso dele.

No Linux, o ld.so foi feito não apenas como um módulo que o SO invoca implicitamente, como decorrência da execução de um programa com ligações dinâmicas, mas também como um executável que o próprio usuário pode chamar diretamente, passando o nome do programa como argumento. O seu caso é um exemplo da utilidade desse tipo de implementação.

Em sistemas que suportam múltiplos formatos de arquivos executáveis, o ld.so acaba sendo renomeado para um nome mais complexo, que explicita qual dos formatos será suportado por essa versão do ld.so. No seu caso, você usou a versão de ld.so voltada à arquitetura x86_64, nativa para Linux (se você usasse uma emulação de Solaris ou Hurd, por exemplo, poderia ser necessário outra versão de ld.so), versão 2. Por isso esse nome.


5. Explicação perfeita!

Fred Melo
fredmelo

(usa Ubuntu)

Enviado em 25/11/2017 - 22:07h

Paulo, muito obrigado por suas informações! Você foi ótimo!
Espero que isso sirva para ajudar outros estudantes também!
Obrigado!!

#usa Ubuntu 14 / Kali Linux






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts