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

标签 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;
}

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

最佳答案

您对自动 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

关于c - 在 gcc 中初始化数组,未定义对 `memcpy' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30098054/

相关文章:

c - 一种确定两个字符串是否是彼此的变位词的可能算法?

ios - 是否可以同时填充两个数组?

javascript - 按周 javascript 分组日期

java - 在 Android 中为数组添加值

Linux 编辑器 : I always get "GConf Error: failed to contact configuration server ..."

c - 使用带有嵌套 for 循环和内在函数的 openmp 时出现问题

c - 如何更新函数内的指针参数?

c - 什么是在 C 中打开文件?

linux - 在 Shell 中连接字符串

linux - 用于在特定文件夹结构中备份修改文件的 Bash 脚本