无法在ntfs格式化分区上从.c文件编译可执行文件

时间:2015-06-07 18:31:26

标签: c linux

我已经尝试了很长时间来解决将简单C代码编译成可执行文件的明显问题。我已经制作了一个简单的C代码,它应该通过makefile将double的字节大小打印到.txt文件。它不会在我的系统上编译可执行文件,但可以在我大学的Linux服务器上完美运行。我在cc版本" cc(Ubuntu 4.8.2-19ubuntu1)4.8.2 "中运行 Linux Mint 17.1 64bit 。我的测试C代码位于文件 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服务器时键入cc -dumpversion返回&#34; cc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)&#34;,然后输入&#34; cc-dumpmachine&#34;返回&#34; x86_64-redhat-linux&#34;

我不明白为什么我机器上的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编译temp.c而不是-c并不能完成这项工作。任何时候我尝试运行./temp或者编译的结果都会返回&#34; Permission denied&#34;言。

1 个答案:

答案 0 :(得分:6)

如评论中的OP所述,可执行文件位于NTFS格式的分区中。默认情况下,Ubuntu(因此我假设是Mint)不会以可以执行文件的方式挂载NTFS。

引自an answer on AskUbuntu by @Sebastian(经过修改),将对/etc/fstab进行以下更改:

  

解决方案是在<{strong> exec选项之后编写users挂载选项。这是因为users选项会隐式激活noexec选项,因此您必须明确指定exec