【问题标题】:Why does "./a.out" only run the last compiled executable program and not the previous ones?为什么“./a.out”只运行最后编译的可执行程序而不运行之前的可执行程序?
【发布时间】:2018-09-09 02:59:58
【问题描述】:

我已经学习了前两门 Java 课程,现在必须学习 C++ 中的数据结构。我正在尝试打开我编译的不同文件。

他们只是两个“你好,世界!”文本略有不同的程序。

当我输入时:

g++ HelloWorld.cpp

我通过在命令提示符中输入 ./a.out 来创建文件“a.out”。

现在我编译了第二个可执行程序 HelloWorldII.cpp,a.out 文件只运行该程序。

当我尝试运行 ./HelloWorld.cpp 时,我的权限被拒绝,所以我输入:

sudo chmod 744 /Users/username/HelloWorld

为了让我成为无效文件夹的所有者,所以我输入了:

sudo chown -R "$garyjones:" users/username/HelloWorld

授予所有者(我)编辑/打开的权限,之后当我尝试运行 ./HelloWorld.cpp 时,终端开始尝试执行它,但即使使用 g++ HelloWorld.cpp 编译它们,也会向我显示语法错误并使用他们的 a.out 文件运行它们工作正常。

如果我在一个文件夹中有多个可执行文件,如何打开我想要的一个?

【问题讨论】:

标签: c++


【解决方案1】:

当您编译和链接代码时,可执行文件默认命名为a.out - 您应该在链接中添加一个参数来命名它。

如果你不这样做,它们都将被命名为a.out,当然会相互覆盖 - 只能有一个具有该名称的文件。

【讨论】:

  • 那个参数是-o 用于输出。例如$ g++ HelloWorld.cpp -o HelloWorld
【解决方案2】:

您尝试执行纯 ascii 文本文件很奇怪。您不了解执行模式的含义。你不熟悉 g++。您似乎不知道编译器如何从源文件生成可执行文件的过程。

这是我的建议。

  1. Google g++ 或其他一些编译器的基本用法。选择你最喜欢的。

这是临时解决方案。

g++ <source file> -o <executable filename>

例子:

## if you don't specific a name for the binary file, 
## it will generate a.out and delete the exiting a.out firstly
g++ HelloWorld.cpp -o HelloWorld
## and then you can execute it 
./HelloWorld
  1. 弄清楚文件权限的确切含义。
  2. a.out 文件名有传统原因,我建议您探索一下。这很有趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多