J'ai écrit un programme C ++ et je l'ai exécuté pour produire un fichier .out. Cependant, chaque fois que j'essaye de l'exécuter, j'obtiens une autorisation refusée. J'ai lu que nous pouvons utiliser sudo, mais je n'arrive pas à le faire fonctionner. J'utilise quelque chose comme, sudo "./a.out" mais cela ne fonctionne pas non plus.
Modifier :
Voici le message que je reçois lorsque j'essaie "./a.out".
bash: ./a.out: Permission denied
command-line
executable
c++
compiler
Shamim Hafiz
la source
la source
Réponses:
Habituellement,
g++
donne au fichier créé des autorisations d'exécution. Si vous ne passez pas l'-o
option, le fichier sera nomméa.out
.Deux raisons possibles pour lesquelles votre fichier n'a pas le bit d'exécution défini, avec leurs solutions:
La valeur umask est définie sur une valeur comme 0133, empêchant ainsi le bit d'exécution d'être défini. Solution: définissez explicitement les autorisations:
fmask=0022
ouumask=0022
(en omettantfmask
). Voir la section Options de montage pour le gras sur la page de manuel du montage pour plus de détails.Pour les scripts bash dont le bit d'exécution n'est pas défini, vous pouvez exécuter
bash file.sh
. Une telle fonctionnalité existe pour tous les fichiers avec un contenu exécutable (fichiers compilés et fichiers avec un#!/path/to/interpreter
ensemble de lignes shebang ). Pour exécuter des fichiers sans le jeu de bits d'exécution, utilisez le fichier spécial/lib/ld-linux.so.2
(ou/lib/ld-linux-x86-64.so.2
pour les applications 64 bits) pour exécuter un tel programme:la source
C:\Ubuntu
avait été créée). Cela ne devrait pas être un problème à moins que vous ne mettiez des fichiers sur "C:" et non sur votre installation Ubuntu. Si vous n'utilisez pas Windows ou que vous disposez de beaucoup d'espace disque, je vous suggère d'installer Ubuntu sur une partition dédiée. Et encore une fois, NTFS / FAT32 ne supporte pas les autorisations Linux, de sorte que vous pouvez exécutersudo chown user file
,chmod 755 file
il ne fonctionnera pas. Vous avez vraiment besoin d'un système de fichiers EXT pour cela.~
, je crée~/projects
et y mets tous mes projets, vous pourriez faire la même chose..out est une extension inhabituelle. Habituellement, cela signifierait normalement un fichier "sortie de trace".
Vérifiez votre syntaxe que vous utilisez pour compiler
par exemple
ou peut-être
Vous pouvez examiner pour voir si le bit exécutable est défini sur le fichier
ou vous pouvez simplement forcer le bit exécutable
alors vous pouvez exécuter votre fichier
ou simplement
Vous devriez aussi peut-être vérifier que le fichier de sortie a été écrit correctement en tant que binaire
c'est à dire
Cela indiquera le format du fichier - un script ou un binaire
Vous devez rarement exécuter en tant que root, sauf si vous avez restreint les personnes qui devraient pouvoir exécuter l'exécutable.
Si vous avez compilé en tant que root (par exemple sudo make), ou avez un Makefile qui a installé l'exécutable en tant que root, puis-je vous suggérer de récupérer l'autorisation en tant qu'utilisateur connecté
c'est à dire
c'est-à-dire remplacer "fred" par votre identifiant.
la source
copiez simplement le dossier dans votre dossier personnel et cela fonctionnera. Vous essayez probablement de l'exécuter sur un disque externe ou quelque chose.
la source
La solution de contournement pour les systèmes de fichiers FAT dans la première réponse
"Cela pourrait être le cas si vous placez des fichiers sur un lecteur flash au format FAT32. Solution: (...) montez le lecteur avec fmask = 0022 ou umask = 0022 (en omettant fmask)."
ne fonctionne normalement pas - la valeur par défaut pour umask est généralement 0022 de toute façon, donc cela ne change rien.
Cependant, un autre paramètre de montage par défaut interdit effectivement l'exécution des binaires, surtout si le système de fichiers FAT est monté en tant qu'utilisateur non root:
noexec
Il suffit donc de monter des disques au format FAT avec l'option
exec
comme ceci:(cela doit normalement être fait en tant que root, d'où le "sudo") et vous devriez pouvoir exécuter des binaires directement à partir de là.
la source
Je parie que votre programme n'a pas de fonction 'main ()', comme si c'était le cas, votre compilateur aurait créé un exécutable .out. Pour le moment, il ne s'agit que d'un fichier objet plein de code, mais il n'y a pas de point d'entrée. main () est un nom de fonction spécial en C et C ++ qui indique au compilateur de créer un programme plutôt que simplement des fichiers objets qui peuvent être liés à un programme ou une bibliothèque.
Je serais intéressé de savoir quelle ligne de commande vous avez utilisée pour produire ce fichier, car le compilateur c ++ de GNU GCC, g ++, ne me permettra pas de créer un programme simple sans fonction principale:
Cependant, si je modifie «void no_main» en «int main», cela fonctionne:
la source