我正在尝试使用C++
而不是C
为我的MIPS based embedded device
构建我的应用程序。首先,我遇到了一个链接问题,您可以看到here。这个问题已修复,我可以成功构建我的应用程序。在我的代码中,我使用malloc
函数进行内存分配,但是当我调用此函数时,我收到"Segment Fault"
消息。我将malloc
替换为new
运算符,但结果相同。有关更多信息,请参阅下面的代码:
int main(int argc, char** argv)
{
char* str = (char*)malloc(10 * sizeof(char)); //or char* str = new char[10];
strcpy(str, "Hello");
return 0;
}
执行第3行并调用malloc
函数时,屏幕上会显示"Segment Fault"
消息。如果我使用mipsel-elf-gcc
代替mipsel-elf-g++
,我就没有这个问题。
这里有什么问题?
答案 0 :(得分:1)
您写道您的目标平台是ARMv7处理器,但您的交叉编译器是一个mipsel编译器。 您应该下载ARM的工具链。来自Mentor Graphics的Sourcery Lite工具链相当不错。
例如,您可以尝试使用arm-2011.03-41编译程序。
答案 1 :(得分:1)
malloc()的库代码可能是成熟和正确的。 GNU工具链库需要一个特定于目标的移植层来将库粘贴到目标硬件和/或操作系统。对于malloc()和C ++ new
以及它们的变体,相关的系统代码在sbrk()
(或sbrk_r()
中用于重入,尽管这通常本身就是一个包装器aropund sbrk()
)。
工具链供应商的sbrk()
实现可能是一个通用的存根,而不是针对您的特定目标。您需要为运行时环境实现它。