簡體   English   中英

鏈接器錯誤 - typedef結構

[英]Linker Error - typedef struct

我有一個編譯/鏈接錯誤如下:

Undefined symbols for architecture x86_64:
"_memory_table", referenced from:
_initialize in main.o

linker command failed with exit code 1 

問題可能出在下面的.h文件中。 我的typedef結構有什么問題嗎? main.c只調用initialize()。 initialize()函數如下。 為簡潔起見,我已經取出了所有#define宏。 主要包含在代碼的下方。

謝謝。

//globals.h
#ifndef memory_manager_globals_h
#define memory_manager_globals_h

/******** Memory Table Entry Data Structure**********/
typedef struct
{
    uint32_t block_address;
    uint32_t next_free_block;

}mem_table_entry_t;

/******** Memory Table Data Structure**********/
typedef struct
{
    mem_table_entry_t two_kib[8];
    mem_table_entry_t one_kib[16];
    mem_table_entry_t half_kib[32];
    mem_table_entry_t quarter_kib[64];
    mem_table_entry_t eighth_kib[128];

}mem_table_t;

extern mem_table_t memory_table;

#endif

...

//MAIN.C
#include <stdio.h>
#include "globals.h"


void initialize(void)
{

    int block_count = 0;            //
    uint32_t dynamic_address = HEAP_START;

    while(block_count <= INITIALIZE_BLOCK_COUNT)
    {
        if((block_count >= TWO_KIB_LO) && (block_count < TWO_KIB_HI))
        {
            memory_table.two_kib[block_count].block_address = HEAP_START;
        dynamic_address = dynamic_address + 0x800;

        memory_table.two_kib[block_count].next_free_block = dynamic_address;
        block_count++;
    }
...

[已解決] .h文件的正確格式應如下所示:

/******** Memory Table Entry Data Structure**********/
typedef struct
{
    uint32_t block_address;
    uint32_t next_free_block;

}mem_table_entry_t;


/******** Memory Table Data Structure**********/
typedef struct
{
    mem_table_entry_t two_kib[8];
    mem_table_entry_t one_kib[16];
    mem_table_entry_t half_kib[32];
    mem_table_entry_t quarter_kib[64];
    mem_table_entry_t eighth_kib[128];

}mem_table_t;

    mem_table_t memory_table;

    extern mem_table_t memory_table;

您缺少memory_table的定義。 extern行是聲明,而不是定義。

將此行添加到您的C文件以修復鏈接問題:

mem_table_t memory_table;

暫無
暫無

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

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