使用向量引起的段错误

时间:2012-01-23 11:00:13

标签: c++ vector embedded mips

我正在尝试使用C ++而不是C为我的基于MIPS的嵌入式设备构建我的应用程序。首先,我遇到了一个链接问题,您可以看到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++来构建我的应用程序。

有什么问题?

2 个答案:

答案 0 :(得分:2)

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

我建议只使用不同的编译器,而不是尝试调试Cygwin的mipsel-elf-gcc包,这可能是旧的,没有经过良好测试。特别是,Mentor Graphics“Sourcery CodeBench Lite Edition”构建的GCC编译器和相关的C和C ++库可以从http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/免费下载 - 它基本上只是作为Cygwin编译器的替代品。您正在使用(包括正确使用Cygwin路径,即使它名义上构建为“普通Windows”编译器),区别在于它已经过测试和验证才能真正正常工作。

[免责声明:我为Mentor Graphics工作,所以我不能说我没有偏见 - 但是我们确实做了大量的工作来使这个编译器工作,MIPS与我们签订合同,使其可用于世界免费,所以我们有动力确保它正常运作。此外,如果您熟悉CodeSourcery“Sourcery G ++”编译器,“Sourcery CodeBench”是他们的新名称,现在CodeSourcery是Mentor Graphics的一部分。]

答案 1 :(得分:1)

我假设你已经为mips交叉构建了C ++库。检查库是否已正确构建并且是否已为您的mips配置。您还可以在gdb中加载可执行文件,并查看崩溃发生的确切位置。我认为它发生在libc ++中的某个地方。