Eu escrevi um programa em C ++ e o cumpri para produzir um arquivo .out. No entanto, sempre que tento executá-lo, recebo Permissão Negada. Eu li que podemos usar o sudo, mas não consigo fazê-lo funcionar. Eu uso algo como, sudo "./a.out", mas isso também não funciona.
Editar :
Aqui está a mensagem que recebo quando tento "./a.out".
bash: ./a.out: Permission denied
command-line
executable
c++
compiler
Shamim Hafiz
fonte
fonte
Respostas:
Geralmente,
g++
concede permissões de execução ao arquivo criado. Se você não passar a-o
opção, o arquivo será nomeadoa.out
.Duas possíveis razões pelas quais seu arquivo não possui o bit de execução definido, com suas soluções:
O valor umask é definido como um valor como 0133, impedindo que o bit de execução seja definido. Solução: defina as permissões explicitamente:
fmask=0022
ouumask=0022
(omitindofmask
). Consulte a seção Opções de montagem para gordura na página manual de montagem para obter mais detalhes.Para scripts bash que não possuem o bit de execução definido, você pode executar
bash file.sh
. Esse recurso existe para todos os arquivos com conteúdo executável (arquivos compilados e arquivos com um#!/path/to/interpreter
conjunto de linhas shebang ). Para executar arquivos sem o conjunto de bits de execução, use o arquivo especial/lib/ld-linux.so.2
(ou/lib/ld-linux-x86-64.so.2
para aplicativos de 64 bits) para executar um programa:fonte
C:\Ubuntu
foi criada). Isso não deve ser um problema, a menos que você esteja colocando os arquivos em "C:" e não a instalação do Ubuntu. Se você não estiver usando o Windows ou tiver bastante espaço em disco, sugiro instalar o Ubuntu em uma partição dedicada. E, novamente, o NTFS / FAT32 NÃO suporta permissões do Linux; portanto, você pode executarsudo chown user file
,chmod 755 file
não funcionará. Você realmente precisa de um sistema de arquivos EXT para isso.~
, eu crio~/projects
e coloquei todos os meus projetos nele, você poderia fazer a mesma coisa..out é uma extensão incomum. Normalmente, isso normalmente significa um arquivo de "saída de rastreamento".
Verifique sua sintaxe que você está usando para compilar
por exemplo
ou talvez
Você pode examinar para ver se o bit executável está definido no arquivo
ou você pode apenas forçar o bit executável
então você pode executar seu arquivo
ou simplesmente
Você também deve verificar se o arquivo de saída foi gravado corretamente como um arquivo binário.
ie
Isso informará qual o formato do arquivo - um script ou um binário
Você raramente precisa executar como root, a menos que tenha restringido quem deve executar o executável.
Se você compilou como root (por exemplo, sudo make) ou possui um Makefile que instalou o executável como root, posso sugerir que você recupere a permissão à medida que o usuário efetuou login
ie
ou seja, substitua "fred" pelo seu ID de usuário.
fonte
basta copiar a pasta para sua pasta pessoal e ela funcionará. Você provavelmente está tentando executá-lo em uma unidade externa ou algo assim.
fonte
A solução alternativa para sistemas de arquivos FAT na primeira resposta
"Este pode ser o caso se você estiver colocando arquivos em uma unidade flash formatada em FAT32. Solução: (...) monte a unidade com fmask = 0022 ou umask = 0022 (omitindo o fmask)."
normalmente não funciona - o padrão para umask geralmente é 0022 de qualquer maneira, portanto, isso não altera nada.
O padrão de outro parâmetro de montagem, no entanto, desabilita efetivamente a execução de binários, especialmente se o sistema de arquivos FAT estiver montado como usuário não raiz:
noexec
Portanto, basta montar unidades formatadas em FAT com a opção da seguinte
exec
forma:(isso normalmente deve ser feito como root, daí o "sudo") e você deve poder executar binários diretamente a partir daí.
fonte
Aposto que seu programa não possui uma função 'main ()', como se tivesse, seu compilador tornaria a.out executável. No momento, é apenas um arquivo de objeto cheio de código, mas não há ponto de entrada. main () é um nome de função especial em C e C ++ que informa ao compilador para criar um programa em vez de apenas arquivos de objetos que podem ser vinculados a um programa ou biblioteca.
Eu estaria interessado em saber qual linha de comando você usou para produzir este arquivo, pois o compilador c ++ do GNU GCC, g ++, não me permite criar um programa simples sem uma função principal:
No entanto, se eu fizer a alteração 'void no_main' para 'int main', funcionará:
fonte