G++ 编译,可执行文件无法运行

Posted

技术标签:

【中文标题】G++ 编译,可执行文件无法运行【英文标题】:G++ Compiles, Executable Won't Run 【发布时间】:2016-09-30 22:40:31 【问题描述】:

一段时间以来,我一直在使用文本编辑器和 g++ 编译和运行程序,但由于某种原因,它今天停止工作。

它编译时不会出错,但是当我尝试运行可执行文件时,它什么也没做。没有错误,没有输出。没有。这是我要运行的代码。

#include <iostream>
#include <fstream>

int main()
// Initializes variable.
    int coordinatePair;
// Creates an object to use for the file.
    std::ofstream fileReader;
// Initiates a for-loop to get the value of each variable.
    for(int i = 0; i == 5; i++)
        std::cout << "Please enter the x-coordinate of your coordinate pair. " << std::endl << "You have " << 5 - i << " pairs left to enter." << std::endl;
        std::cin >> coordinatePair;
// Opens the file.
    fileReader.open("points.txt");
// Writes the user's values to the file.
    fileReader << coordinatePair << std::endl;
// Closes the file. 
    fileReader.close();
   


在终端中,我创建了一个指向文件位置的目录...

cd ~/file location

然后我编译它。

g++ points_out.cpp -o points_out

我尝试运行它。

./points_out

什么也没有发生。没有错误消息,没有输出,什么都没有。虽然代码效率不高(我可能最好在 for 循环之外打开和关闭文件。)它仍然应该运行。我尝试输入不正确的代码以查看会发生什么,它给了我正确的错误代码。我也试过了

g++ -W -Werror points_out.cpp

...这也没有给我任何错误代码。我尝试为本周早些时候编译和运行的不同 .cpp 文件创建一个新目录,它工作得很好。由于某种原因,这个只是不会运行。而且我确信它正在编译,因为正在创建可执行文件。我也确信它没有运行,因为没有创建文本文件。

我让这个东西成功编译并运行一次,然后它就创建了文本文件。这是我第一次遇到 g++ 的问题。我到处寻找解决方案,但大多数遇到此问题的人并没有这样做

./points_out

MingW 部分或存在问题或需要卸载 Avast。这些都不是我遇到的问题,所以我很茫然。

另外,不确定这是否会有所帮助,但正在运行

g++ --version

得到以下输出:

g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

【问题讨论】:

检查 for 循环中的条件。 另一个调试技巧:在整个过程中进行调试printf() 调用。例如,puts("hello world");main() 开头的 puts("hello world"); 会让您知道程序已启动。 提示:第一次通过循环,是 i == 5? 请在您的 Q 中描述您所说的“没有(发生)”是什么意思。程序是否完成并返回提示符,或者您是否必须执行 Ctrl-C 来终止程序并返回命令行提示符或 ???否则好 Q,祝你好运。 我是个白痴。谢谢大家,我很抱歉,非常尴尬。 【参考方案1】:

对于一个什么都不做但成功完成的程序来说,这种行为是正常的。

C++ for 循环在进入循环体之前评估循环条件。循环体完成后,计算可选的循环后表达式,程序返回条件检查。

因此您的代码将值0 分配给i,然后在允许进入循环之前测试是否i == 5

你的意图并不完全清楚,但你可能不是这个意思

for (int i = 0; i < 5; i++)

我们可以用这段代码快速演示:

#include <iostream>

int main() 
    std::cout << "original loop:\n";
    for (int i = 0; i == 5; i++)
        std::cout << i << '\n';
    std::cout << "corrected loop:\n";
    for (int i = 0; i < 5; i++)
        std::cout << i << '\n';

现场演示:http://ideone.com/O0Ul2z

-- 附录--

大多数程序员会考虑添加类似简洁、无条件的东西

std::cout << "hello world\n";

在他们的程序顶部,以验证它没有运行还是没有工作。

【讨论】:

是的,我是个白痴。谢谢你。我也很清楚,所以这很丢脸。我会把这归咎于压力和睡眠不足。谢谢! 在附录中,我确实这样做了,尽管我将它添加到最后,所以我想这就是它不起作用的原因。就像我说的,睡眠不足。

以上是关于G++ 编译,可执行文件无法运行的主要内容,如果未能解决你的问题,请参考以下文章

调试选项 -g 如何更改二进制可执行文件?

MinGW:C++ 编译器无法创建可执行文件

在linux中如何编译C程序,使之成为可执行文件?如何调试?

Linux Fultter 桌面 - 无法从已编译的可执行文件运行应用程序,flutter 运行正常

Qt编译生成的exe无法执行

autotools:C 编译器无法创建可执行文件