He escrito un programa C ++ y lo he cumplido para producir un archivo .out. Sin embargo, cada vez que intento ejecutarlo, obtengo permiso denegado. Leí que podemos usar sudo, pero no puedo hacer que funcione. Yo uso algo como, sudo "./a.out" pero eso tampoco funciona.
Editar :
Aquí está el mensaje que recibo cuando intento "./a.out".
bash: ./a.out: Permission denied
command-line
executable
c++
compiler
Shamim Hafiz
fuente
fuente
Respuestas:
Por lo general,
g++
otorga permisos de ejecución al archivo creado. Si no pasa la-o
opción, se nombrará el archivoa.out
.Dos posibles razones por las que su archivo no tiene el bit de ejecución establecido, con sus soluciones:
El valor de umask se establece en un valor como 0133, evitando así que se establezca el bit de ejecución. Solución: establezca los permisos explícitamente:
fmask=0022
uumask=0022
(omitiendofmask
). Consulte la sección Opciones de montaje para grasa en la página del manual de montaje para obtener más detalles.Para las secuencias de comandos bash que no tienen el bit de ejecución establecido, puede ejecutar
bash file.sh
. Dicha característica existe para todos los archivos con contenido ejecutable (archivos compilados y archivos con un#!/path/to/interpreter
conjunto de líneas shebang ). Para ejecutar archivos sin el conjunto de bits de ejecución, use el archivo especial/lib/ld-linux.so.2
(o/lib/ld-linux-x86-64.so.2
para aplicaciones de 64 bits) para ejecutar dicho programa:fuente
C:\Ubuntu
se ha creado). Esto no debería ser un problema a menos que esté poniendo archivos en "C:" y no en su instalación de Ubuntu. Si no está utilizando Windows, o tiene mucho espacio en disco, le sugiero que instale Ubuntu en una partición dedicada. Y nuevamente, NTFS / FAT32 NO admite permisos de Linux, por lo que puede ejecutarlosudo chown user file
,chmod 755 file
no funcionará. Realmente necesitas un sistema de archivos EXT para eso.~
, creo~/projects
y pongo todos mis proyectos en él, podrías hacer lo mismo..out es una extensión inusual. Por lo general, esto normalmente significaría un archivo de "salida de rastreo".
Verifique la sintaxis que está utilizando para compilar
p.ej
o tal vez
Puede examinar para ver si el bit ejecutable está establecido en el archivo
o simplemente puedes forzar el bit ejecutable
entonces puedes ejecutar tu archivo
o simplemente
Quizás también deba verificar que el archivo de salida se haya escrito correctamente como binario
es decir
Esto informará de qué formato es el archivo, ya sea un script o un binario
Rara vez necesita ejecutar como root a menos que haya restringido quién debería poder ejecutar el ejecutable.
Si compiló como root (por ejemplo, sudo make), o tiene un Makefile que instaló el ejecutable como root, ¿puedo sugerirle que recupere el permiso cuando el usuario inició sesión?
es decir
es decir, reemplace "fred" con su identificación de usuario.
fuente
simplemente copie la carpeta a su carpeta de inicio y funcionará. Probablemente esté intentando ejecutarlo en una unidad externa o algo así.
fuente
La solución para los sistemas de archivos FAT en la primera respuesta
"Este podría ser el caso si coloca archivos en una unidad flash con formato FAT32. Solución: (...) monte la unidad con fmask = 0022 o umask = 0022 (omitiendo fmask)".
normalmente no funciona: el valor predeterminado para umask es principalmente 0022 de todos modos, por lo que esto no cambia nada.
Sin embargo, el valor predeterminado de otro parámetro de montaje no permite la ejecución de archivos binarios, especialmente si el sistema de archivos FAT está montado como usuario no root:
noexec
Así que simplemente monte unidades con formato FAT con la opción de esta
exec
manera:(esto normalmente debe hacerse como root, de ahí el "sudo") y debería poder ejecutar binarios directamente desde allí.
fuente
Apostaría a que su programa no tiene una función 'main ()', como si lo tuviera, su compilador habría hecho un ejecutable. En este momento es solo un archivo objeto lleno de código, pero no hay un punto de entrada. main () es un nombre de función especial en C y C ++ que le dice al compilador que cree un programa en lugar de solo archivos de objetos que pueden vincularse a un programa o biblioteca.
Me interesaría saber qué línea de comando usó para producir este archivo, ya que el compilador c ++ de GNU GCC, g ++, no me permitirá crear un programa simple sin una función principal:
Sin embargo, si hago el cambio 'void no_main' a 'int main' funciona:
fuente