在 gcc 中初始化数组,未定义对“memcpy”的引用
Initialize array in gcc, undefined reference to `memcpy'
我在 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;
}
问题出在哪里,我该如何解决?
自动 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
。
我在 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;
}
问题出在哪里,我该如何解决?
自动 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
。