我正在尝试使用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++
来构建我的应用程序。
有什么问题?
答案 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 ++中的某个地方。