我一直在尝试很长时间来解决编译简单的C代码到一个可执行文件的明显问题。 我已经做了一个简单的C代码,应该通过生成文件打印到一个.txt
文件的大小以字节为单位。 它不能在我的系统上编译一个可执行文件,但是在我的大学的Linux服务器上完美地工作。 我正在运行Linux版本Mint 17.1 64bit与cc版本“ cc(Ubuntu 4.8.2-19ubuntu1)4.8.2 ”。 我的testingC代码在文件temp.c
:
#include <stdlib.h> #include <stdio.h> int main( void ) { printf("sizeof(double) returns %lu\n", sizeof(double)); return 0; }
我的makefile
如下所示:
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
在我的大学linux服务器上login时inputcc -dumpversion
返回“ cc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
”,input“ cc-dumpmachine
”返回“ x86_64-redhat-linux
”
我不明白为什么make all
我的机器上的make all
返回
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
其他信息: temp.c
位于NTFS分区的文件夹中,该分区在使用选项exec进行引导时自动挂载。 从shell而不是makefile中编译不带-c
temp.c
不能完成这个工作。 任何时候我尝试运行./temp
或编译的结果返回“ Permission denied
”语句。
如注释中的OP所述,可执行文件位于NTFS格式的分区中。 默认情况下,Ubuntu(因此我会假设Mint)没有以可以执行文件的方式安装NTFS。
引用@Sebastian在AskUbuntu上的一个答案 (有修改),将在/etc/fstab
上进行以下更改:
解决方法是在
users
选项后面写入exec
mount选项。 这是因为users
选项隐含地激活了noexec
选项,所以你必须明确指定exec
。