Linux的gcc权限问题

为什么gcc-o new 加文件1然后./new可以输出程序结果
但是直接gcc 加文件1 然后 . /文件1没有权限

  • 建议你看下这篇博客👉 :【GCC】gcc警告选项汇总--编辑中|gcc编译选项
  • 除此之外, 这篇博客: Linux编译器-gcc/g++的使用中的 二、gcc实际操作中如何将.c文件转化成可执行程序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •         在第一部分,细述了gcc将.c文件转化成可执行程序的整个过程,但在实际使用过程当中不必如此麻烦。只需要一条指令即可:

    [xxp@VM-24-3-centos lesson1]$ gcc test.c -o test
    [xxp@VM-24-3-centos lesson1]$ ls
    install.sh  test  test.c
    [xxp@VM-24-3-centos lesson1]$ ./test
    hello world
    
  • 您还可以看一下 夏曹俊老师的Linux编程之GCC编译工具实战课程中的 GCC介绍小节, 巩固相关知识点

参考的gpt
在Linux系统中,编译生成的可执行文件默认情况下是没有执行权限的,需要通过 chmod 命令赋予执行权限才能运行。

当使用 gcc -o new 文件1 命令时,-o 参数指定生成的可执行文件名为 new,编译生成的可执行文件会被赋予默认的执行权限。

而当直接使用 gcc 文件1 命令时,生成的可执行文件默认名称为 a.out,且没有执行权限。此时如果想要运行可执行文件,需要先使用 chmod +x 文件1 命令赋予执行权限,再通过 ./文件1 命令来运行。

因此,如果直接使用 gcc 文件1 命令编译生成的可执行文件没有执行权限,需要手动使用 chmod +x 命令赋予执行权限后才能运行。

参考GPT和自己的思路:

这是因为在使用gcc编译时,如果没有使用-o标志指定输出文件名,则默认输出文件名为a.out。而当使用-o指定输出文件名时,输出文件名为指定的文件名。因此,例如当使用命令"gcc -o new file1.c"编译时,编译器将生成一个可执行文件new,因此可以使用"./new"来运行程序。而如果直接使用"gcc file1.c"编译,则会生成一个名为a.out的文件,因此需要使用"./a.out"来运行程序。此外,如果直接使用"./file1"来运行程序,需要确保该文件的执行权限已被正确设置。