C 未定义的函数引用从未使用/定义/任何内容?

C 未定义的函数引用从未使用/定义/任何内容?,c,C,我有一个C函数,如下所示: static uint32_t initrd_read(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer) { initrd_file_header_t header = file_headers[node->inode]; if (offset > header.length) return 0; if (offset+si

我有一个C函数,如下所示:

static uint32_t initrd_read(fs_node_t *node, 
    uint32_t offset, uint32_t size, uint8_t *buffer) {

    initrd_file_header_t header = file_headers[node->inode];
    if (offset > header.length)
        return 0;
    if (offset+size > header.length)
        size = header.length-offset;
    memcopy(buffer, header.offset+offset, size);
    return size;
}
当与程序的其余部分链接时,将抛出对“memcpy”的
未定义引用<代码>memcpy
从未在代码中使用,也未定义。代码是独立链接的,因此它与C库没有冲突。出于某种原因,链接器认为上面的函数在函数调用的开头调用了
memcpy
,我不知道为什么


为什么会发生这种情况?

memcpy
可以被编译器隐式地用于执行“长”复制操作(如结构赋值)。例如,在您的代码中,您正在执行

initrd_file_header_t header = file_headers[node->inode];
这看起来是一个很好的候选对象,它实际上将被转换为
memcpy
调用

您创建该
initrd\u file\u header\t
对象的副本而不是直接访问原始对象,这有什么原因吗?我看不到你修改那个对象,所以你可以这样做

const initrd_file_header_t *header = &file_headers[node->inode];

并访问字段为“代码>页眉>长度< /代码>等。这可能会消除对<代码> MycPy < /C>的隐式调用。

我建议拆开目标文件,看看代码< MycPy < /C> >在哪里。没有考虑长拷贝。谢谢(将在5分钟后打开时选择答案)