2015-10-13 79 views
1

我有以下文件:體系結構x86_64的未定義符號。如何正確包含?

bst.h:其中只包含聲明

typedef struct Node Node; 
struct Node { 
    unsigned int key; 
    Node *left; 
    Node *right; 
}; 

int insert(Node *node); 
Node* lookup(unsigned int key); 
int delete(Node *node); 

bst.c:它定義了聲明

#include "bst.h" 

#include <stdio.h> 


Node *root = NULL; 

int insert(Node* node) { 
    ... implementation ... 
    return 0; 
} 

Node* lookup(unsigned int key) { 
    ... implementation ... 
    return current; 
} 

int delete(Node *node) { 
    ... implementation ... 
    return 0; 
} 

test_bst。 c:測試BST實施

#include "bst.h" 
#include <stdio.h> 

int main() { 

    Node node = {10,NULL,NULL}; 

    insert(&node); 

    return 0; 
} 

如果我運行gcc test_bst.c我得到以下錯誤:

Undefined symbols for architecture x86_64: 
    "_insert", referenced from: 
     _main in cc1m0mA1.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

什麼我錯在這裏做什麼?它是否與我包含文件的方式有關?或者用我的彙編指令?我看到很多與我的標題相同的問題 - 但是,它們都不能幫助我解決我的錯誤。

+5

你需要編譯這兩個C文件。 – teppic

+0

將'extern'添加到頭文件中的函數簽名中。 –

回答

3

您不包含實際實現insert函數的文件。你可以這樣做:

gcc -c -o bst.o bst.c 
gcc -o test test_bst.c bst.o 
+0

第一行錯了 - 它會嘗試鏈接一個可執行文件。 – teppic

+2

@teppic你是對的,修正了 –

+0

謝謝,編譯都工作: gcc -o bst_test test_bst.c bst.c – ndrizza

相關問題