我试图为基于MIPS的嵌入式设备使用C++而不是C构建应用程序。首先,我有一个链接问题,您可以看到here。此问题已修复,我可以成功构建我的应用程序。现在,我想使用std::vector类。我的代码是:

#include <vector>
using namespace std;

int main() {
    vector<char> v;
    v.push_back('s');

    return 0;
}

当执行vector<char> v;行时,屏幕上会出现Segment Fault消息。对于更多测试,我确实测试了new运算符,并且工作正常。我正在使用mipsel-elf-g++来构建我的应用程序。

怎么了?

最佳答案

如注释中所述,您的编译器和/或其运行时库已损坏。 (您可以排除操作系统,因为“elf”目标意味着您没有在目标上运行操作系统,并且如果不存在它也不会被破坏。)

我建议不要尝试调试Cygwin的mipsel-elf-gcc包(该包可能很旧且未经测试),而是建议您使用其他编译器。特别是,可以从http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/免费下载GCC编译器以及相关的C和C++库的Mentor Graphics“Sourcery CodeBench Lite Edition”版本-基本上,它应该可以直接替代您要使用的Cygwin编译器使用(即使名义上是作为“普通Windows”编译器构建的,也可以正确使用Cygwin路径),不同之处在于它已经过测试和验证,可以真正正常工作。

[免责声明:我为Mentor Graphics工作,所以不能说我没有偏见-但我们确实为使该编译器正常工作付出了很多工作,并且MIPS与我们签约以免费将其提供给全世界,因此我们有动力确保其正常运行。另外,如果您熟悉CodeSourcery的“Sourcery G++”编译器,由于CodeSourcery是Mentor Graphics的一部分,“Sourcery CodeBench”是它们的新名称。

10-08 09:36