在GCC中初始化数组,undefined reference to `memcpy'

4
我正在Nachos3.4上使用C语言编码,Centos 6.0上使用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;
}

问题出在哪里,我该如何修复呢?

5
请提供能够重现此问题的(最小化的)完整代码,包括用于编译的命令行。 - Mat
edited, check it again - Fish
1
“gcc 2.95.3”是相当过时的编译器,可能由于ABI不兼容性而在与CentOS 6.0中提供的libc链接时出现问题。 - myaut
2
GCC 2.95?哇,为什么不走进21世纪呢? - Mat
我尝试了最新的gcc,但它与nachos3.4不兼容。 - Fish
尝试检查一下那个古老的编译器是否有某种形式的“无标准库”开关。 - unwind
1个回答

2
你的自动化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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接