簡體   English   中英

未定義的函數引用從未使用/定義/任何東西?

[英]Undefined reference to function never used/defined/anything?

我有一個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;
}

當與程序的其余部分鏈接時,將引發undefined reference to 'memcpy'undefined reference to 'memcpy' memcpy從未在代碼中使用,也未定義。 代碼是獨立鏈接的,因此它與C庫沒有沖突。 由於某種原因,鏈接器認為上面的函數在函數調用開始時調用memcpy ,我不知道為什么。

為什么會發生這種情況?

memcpy可以由編譯器隱式使用,以執行“長”復制操作(如結構賦值)。 例如,在您的代碼中

initrd_file_header_t header = file_headers[node->inode];

對於實際上會被轉換為memcpy調用的東西來說,它看起來很合適。

您是否有理由創建該initrd_file_header_t對象的副本而不是直接訪問原始對象? 我沒有看到你修改那個對象,所以你可以這樣做

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

並以header->length等方式訪問字段。這可能會消除對memcpy隱式調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM