C 未定义的函数引用从未使用/定义/任何内容?
我有一个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
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分钟后打开时选择答案)