【问题标题】:C - program compiling, but unable to provide argumentsC - 程序编译,但无法提供参数
【发布时间】:2013-10-08 00:01:24
【问题描述】:

我在 Mac 上,在终端中我正在编译我的程序

    gcc -Wall -g -o example example.c

它可以编译(没有错误),但是当我尝试提供命令行参数时

   example 5 hello how are you

终端响应“-bash: example: command not found”

编译后应该如何提供我想提供的参数?

【问题讨论】:

  • 您没有运行该程序。您的 shell 正在其 $PATH 上查找名为 example 的命令,该命令不存在。
  • Run code run. C code run. -- 匿名

标签: c shell


【解决方案1】:

使用路径像这样运行它:

   ./example 5 hello how are you

除非 example 二进制文件所在的目录是 PATH 变量的一部分,否则即使您正在运行的二进制文件在当前目录中,您所拥有的也不会工作。

【讨论】:

    【解决方案2】:

    这不是编译问题,而是您的 shell 的问题。当前目录不在您的PATH 中(查看echo $PATH 并使用which 了解shell 如何将其用于某些特定程序,例如which gcc)。

    我建议使用程序的显式文件路径来测试您的程序,例如

    ./example 5 hello how are you
    

    您或许可以编辑您的~/.bashrc,在您的PATH 末尾添加.。有利有弊(特别是一些可能的安全问题,如果您的当前目录碰巧有时是一个“恶意”目录,比如/tmp 可能是:坏人可能会放一个gcc,这是/bin/rm 的符号链接所以你需要在PATH 的末尾添加.(如果你这样做)。

    别忘了学习如何使用调试器(如gdb)。在用 C(或 C++)编码时,这项技能是必不可少的。或许还可以考虑升级您的gcc(Apple 不太喜欢其当前的 GPLv3 许可证,因此不要分发最近的许可证;只需尝试gcc -v 并注意最新的released GCC 是今天的 4.8.1)。

    【讨论】:

    • 谢谢,我会调查的。
    【解决方案3】:

    ./example 5 Hello how are you 是您要查找的语法。

    This article 很好地解释了为什么这很重要。

    基本上,当您点击Enter 时,shell 会检查第一组字符是否为绝对路径。如果不是,它将检查PATH 变量以查找具有您尝试运行的命令名称的可执行文件。如果找到了,它就会运行,否则它会崩溃和燃烧,你会变得非常难过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多