【发布时间】:2018-08-29 19:08:49
【问题描述】:
我有一个简单的程序,用 C++ 编写,在 Windows 10 机器上,用 MinGW g++ 编译器编译。
我包含<string> 标头,它运行良好。当我包含string 数据类型时,它会编译,但不会运行。
重现这个的最少代码量是:
#include <iostream>
#include <string>
using namespace std;
int main() {
string greeting;
cout << "hi" << endl;
return 1;
}
请注意,这工作正常:
#include <iostream>
#include <string>
using namespace std;
int main() {
//string greeting;
cout << "hi" << endl;
return 1;
}
编译器版本为6.3.0g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0
我在 3 天前下载了它,所以我认为它是最新版本。 (也许不是?)
我已经用谷歌搜索并浏览了 stackoverflow 以寻找答案。
我能找到的最接近的问题是,这个人放弃并更换了操作系统。
我发现的另一个解决方案是使用 Cygwin 的编译器。我宁愿不这样做,因为我已经有了一个看似不错的编译器。看来 MinGW 工具被广泛使用,我应该可以使用编译器。
任何其他论坛/博客/等资源在转换字符串或调用字符串方法方面存在问题。
注意:完全相同的代码在 Ubuntu 16.04 上运行良好,附带编译器。
编辑:
虽然我意识到“它不运行”没有帮助,但我不知道如何描述它。我运行编译后的程序,它的行为与我输入echo '' 相同。没有输出,没有任何迹象表明发生了什么事。表达这种行为最有用的方式是什么?
如果我使用调试器,我会得到program exited with code 0xc0000139
快速谷歌搜索返回的结果表明它是编译器的问题。与下面关于我的编译器版本的 cmets 相同...
为了编译程序,我运行g++ main.cpp -o b.exe
要执行它,我运行./b.exe
【问题讨论】:
-
运行程序时收到什么错误信息?是否缺少 C++ 运行时库?
-
1) OT: "所以我认为它是最新版本。" GCC 6.3.0 的发布日期是 2016 年 12 月 21 日,所以,不,它是远远落后于最近的版本。 2)“程序将无法运行”是无用的问题描述。就像打电话到维修店,说你的车不能开,并要求他们解释它有什么问题。
-
"为什么字符串类型会导致 c++ 程序无法运行?" - 使用
std::string本身不会导致程序无法运行。你还有其他问题 -
编译器可能会优化掉
string变量,因为它没有在程序中使用,从而使两个示例等效。 -
使用
g++ -S main.cpp。打开main.s。搜索“问候”。我发现 g++ 5.3.0(在 Cygwin,Windows 7 上)正在优化string。此外,该程序对我来说也可以正常工作;无法重现该问题。