为什么“ ./a.out”仅运行最后一个编译的可执行程序,而不运行先前的可执行程序?

时间:2018-09-09 02:59:58

标签: c++

我已经学习了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

授予所有者(me)编辑/打开权限,此后,当我尝试运行./HelloWorld.cpp时,终端开始尝试执行它,但是即使使用g ++ HelloWorld.cpp进行编译,终端也会显示语法错误。并使用其a.out文件运行它们效果很好。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试执行纯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文件名具有传统原因,建议您进行探索。这很有趣。