He intentado durante mucho tiempo resolver un problema aparente al compilar código C simple en un ejecutable. Hice un código C simple que debería imprimir el tamaño en bytes de double
un .txt
archivo a través de makefile. No compila un ejecutable en mi sistema, pero funciona perfectamente en el servidor Linux de mi universidad. Estoy ejecutando Linux Mint 17.1 64bit con la versión cc " cc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 ". Mi código C de prueba está en el archivo temp.c
:
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
printf("sizeof(double) returns %lu\n", sizeof(double));
return 0;
}
Mi makefile
aspecto es este:
CFLAGS = -Wall -m64 -std=c99
all: A;
A:out.txt
out.txt: temp;
./temp > out.txt
chmod go+r
temp: temp.o
clean:
rm temp.o
rm temp out.txt
Escribir cc -dumpversion
mientras está conectado en el servidor linux de mi universidad devuelve " cc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
" y escribir " cc-dumpmachine
" devuelve " x86_64-redhat-linux
"
No entiendo por qué make all
en mi máquina regresa
cc -Wall -m64 -std=c99 -c -o temp.o temp.c
cc temp.o -o temp
./temp > out.txt
/bin/sh: 1: ./temp: Permission denied
make: *** [out.txt] Error 126
Información adicional: se temp.c
encuentra en una carpeta en una partición NTFS que se monta automáticamente al arrancar con la opción exec . Compilar temp.c
sin -c
desde el shell en lugar de makefile no funciona. Cada vez que intento ejecutar ./temp
o lo que sea, el resultado de la compilación devuelve la Permission denied
instrucción " ".
Como lo menciona el OP en los comentarios, el archivo ejecutable está en una partición con formato NTFS. De forma predeterminada, Ubuntu (y por lo tanto supongo que Mint) no monta NTFS de tal manera que los archivos se puedan ejecutar.
Citando una respuesta en AskUbuntu por @Sebastian (con modificaciones), se realizará el siguiente cambio en /etc/fstab
:
La solución fue escribir la
exec
opción de montaje después de lausers
opción. Eso es porque lausers
opción activa implícitamente lanoexec
opción, por lo que debe especificar explícitamenteexec
.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras