“权限被拒绝”运行使用`-c -o`构建的可执行文件

时间:2017-05-01 14:26:58

标签: makefile

这可能听起来很愚蠢。但我只有.c文件(openfile.c),它看起来像这样:

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char* argv[]){
    char* path = argv[1];
    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;

    int fd = open(path, O_WRONLY | O_EXCL | O_CREAT, mode);
    if(fd == -1){
        perror("open");
        return 1;
    }
    return 0;
}

我想为它写一个Makefile。所以它不应该很难。 Makefile看起来像这样:

openfile: openfile.c 
    gcc -c -o openfile openfile.c

因为我没有/需要一个openfile.h所以我只需要一个openfile.c。编译时,当我运行./open文件时,它会说:bash:./ openfile:Permission denied

那么问题呢?我必须写一个.h文件吗?

1 个答案:

答案 0 :(得分:4)

问题在于您不需要-c。当您将-c传递给gcc时,它不会执行链接步骤,因此您实际上会获得o文件。