尝试编译时,gcc“没有这样的文件或目录”错误

尝试编译时,gcc“没有这样的文件或目录”错误

我刚刚搬到 Ubuntu,目前正在学习 C 语言编程,所以我自然而然地尝试编译一些代码。我确信我使用的命令是正确的(它只是几个字母,拜托),但无论我尝试从哪个目录进行编译,编译器都会抱怨“没有这样的文件或目录”。我已经安装了 build-essential,并且 gcc 似乎运行正常,否则这可能是什么原因造成的?非常感谢您的帮助。

编辑:经过进一步调查,我意识到这种情况发生在我通过编辑器(例如默认的 Ubuntu 编辑器或 Atom)创建的 .c 文件中。使用 gedit 命令时结果成功,但通过编辑器创建同一文件时不成功。我还将文件保存到主目录并ls每次运行以确保它们在那里,然后再尝试编译。以下是错误消息:

me@My-PC:~$ gcc test.c
gcc: error: test.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.

编辑2:我太愚蠢了,没有将文件保存为 .c (我以为在编辑器中将格式设置为“C”就可以了)

答案1

  1. 大小写很重要,test.c 不是 test.C。
  2. 如果存在的话,gcc 实际上会接受任一情况 .c。
  3. gcc 默认拒绝无扩展名的文件,但 steeldriver 向您展示了如何覆盖它(这当然不是标准做法)。
  4. gcc 可以为您提供的名称生成输出,使用您的示例 -o test.out。标准用户设置在主目录中包含一个 bin 目录,这是添加私有脚本的常用位置,因为它已经在您的 PATH 中。例如,在 ~/bin 中,添加一个名为 mygcc 的文件,其中包含
    gcc -o "$1".out ${1}.c
    使用新命令 mygcc test Alter 在任何位置编译您的文件以满足您的需求 - 传递显式名称可执行文件,传递整个 test.c 名称等。
  5. 通过在 PATH 变量中添加“.”,可以从没有 ./ 的本地目录运行(如 ./test.out)(编辑主目录中的 .profile 来执行此操作)

主目录中的 .profile 文件只是您拥有的一个文本文件,因此任何编辑器都可以使用,但请选择不会自动换行的编辑器。PATH 变量通常设置在底部附近,因此您可以将 :. 添加到现有 PATH=... 行的末尾,或者创建一个新行,例如

PATH=${PATH}:.

在末尾添加 . 比在开头添加 . 更“安全”,因此它不能覆盖任何同名的系统程序。运行任何非系统程序都会带来一些风险(它来自哪里,它做什么,......?)但如果该程序是你正在创建的(源代码和所有内容),这些风险就会小一些。测试新编译的程序可能很方便,这是你的选择。

答案2

我终于发现了我的错误,我的文件名中有一个空格,所以 gcc 只读取文件的名字。例如:hello world.c 被读为 hello 。这意味着它找不到名为 Hello World.c 的文件

希望这可以帮助!

相关内容