我已经尝试了很长时间来解决将简单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;言。
答案 0 :(得分:6)
如评论中的OP所述,可执行文件位于NTFS格式的分区中。默认情况下,Ubuntu(因此我假设是Mint)不会以可以执行文件的方式挂载NTFS。
引自an answer on AskUbuntu by @Sebastian(经过修改),将对/etc/fstab
进行以下更改:
解决方案是在<{strong>
exec
选项之后编写users
挂载选项。这是因为users
选项会隐式激活noexec
选项,因此您必须明确指定exec
。