C链接器:多个定义

时间:2013-05-26 20:39:16

标签: c linker

我正在为我正在研究的网络项目编写链接列表实现。它分为两个文件:llist.h和llist.c。我在几个项目文件中包含llist.h,在编译时我链接到我编译的包含llist.c的库。不幸的是,我在llist.h中的每个方法头都出现了“多个定义”错误。即:

../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

谢谢!

更新:好的,问题似乎来自其中一个项目文件中的以下代码片段:

OPP_DIRECTION(getDirToXYPOS((XYPOS*)getFromHeadLList(memories[avID], 0), &curPos)))

请注意,getFromHeadLList是我添加到llist.h并在llist.c中定义的方法。通过简单地注释掉该部分并添加一个虚拟参数,即:

OPP_DIRECTION(getDirToXYPOS(&curPos, &curPos)))

它汇编得很好。

1 个答案:

答案 0 :(得分:1)

很可能您已将llist.c编译到项目中以及静态库中。