在gcc中初始化数组,对`memcpy'的未定义引用

时间:2015-05-07 10:12:41

标签: c arrays linux gcc nachos

我在Nachos3.4,Centos 6.0中编写C代码,由gcc 2.95.3编译,

我使用的命令行是gmake all

当我编译它时,一切都很好

int main()
{
    char* fname[] = {"c(0)", "c(1)", "c(2)", "c(3)", "c(4)", "c(5)", "c(6)", "c(7)"};
    return 0;
}

但是当我这样做时,它说undefined reference to 'memcpy'

int main()
{
    char* fname[] = {"c(0)", "c(1)", "c(2)", "c(3)", "c(4)", "c(5)", "c(6)", "c(7)", "c(8)"};
    return 0;
}

问题在哪里,我该如何解决?

1 个答案:

答案 0 :(得分:1)

自动fname数组的初始化涉及编译器构建从隐藏的static数组到堆栈上的数组的大量数据的副本。 GCC有几种可用于此的技术,其中一个最受欢迎的就是调用C库memcpy例程,因为无论发生什么都应该很好和快速。

在你的情况下,你似乎没有C库,所以这是一个问题。

您可以告诉GCC始终使用x86指令,而不是像这样调用库:

gcc -mstringop-strategy=rep_byte -c -O file.c

gcc -mstringop-strategy=loop -c -O file.c

然而,我的印象是GCC在中期版本3.x中没有开始这样做。

也许您正在使用' MIPS'处理器,教师喜欢那个处理器,其中所需的选项是-mno-memcpy