我正在爲我正在編寫的網絡項目編寫鏈接列表實現。它被分成兩個文件:llist.h和llist.c。我在幾個項目文件中加入了llist.h,編譯時鏈接到我編譯的包含llist.c的庫。不幸的是,我得到了llist.h中每個方法頭的「多重定義」錯誤。即:C鏈接器:多重定義
../util//libdutil.a(llist.o): In function `LListContains':
llist.c:(.text+0x0): multiple definition of `LListContains'
../util//libdutil.a(llist.o):llist.c:(.text+0x0): first defined here
我不太清楚爲什麼我得到這個錯誤。它曾經很好,但是因爲我添加了一個方法,所以這已經開始發生了。下面是整個h文件:
#ifndef _LLIST_H_
#define _LLIST_H_
typedef struct _LinkedList
{
int length;
void* data;
struct _LinkedList* head;
struct _LinkedList* tail;
}* LinkedList;
LinkedList LListContains(LinkedList list, void* data, int (*cmp)(const void *, const void *));
void* getDataLList(LinkedList list);
LinkedList createLList(void* data);
void* getFromHeadLList(LinkedList list, int pos);
void* popHeadLList(LinkedList list);
void* popTailLList(LinkedList list);
LinkedList getNextLList(LinkedList current);
LinkedList getPrevLList(LinkedList current);
void addHeadLList(LinkedList list, void* data);
void addTailLList(LinkedList list, void* data);
void FreeLList(LinkedList list);
#endif
謝謝!
UPDATE:好,這個問題似乎來自下面的代碼片段在項目文件中的一個:
OPP_DIRECTION(getDirToXYPOS((XYPOS*)getFromHeadLList(memories[avID], 0), &curPos)))
注意getFromHeadLList是我加入LLIST.H和LLIST定義的方法。 C。通過簡單地註釋掉該部分並添加一個虛擬參數,即:
OPP_DIRECTION(getDirToXYPOS(&curPos, &curPos)))
它編譯得很好。
如果您顯示正在用於編譯和鏈接的命令,這將有所幫助。並確保不要將'llist.c'添加到IDE的項目中(因爲它被編譯爲獨立的庫)。 – Inspired
從技術上講,錯誤消息看起來像是已將'llist.c'放入靜態庫兩次,但這沒有意義(但是,嘗試從零開始重新編譯庫,擦除.a文件)。爲了確保在項目中沒有'llist.c',請嘗試鏈接而不使用'-ldutil'命令開關。如果編譯,你不知何故將llist.c包含在項目中。 – Inspired