Я пишу реализацию связанного списка для сетевого проекта, над которым я работаю. Он разделен на два файла: llist.h и llist.c. Я включаю llist.h в несколько файлов проекта, а при компиляции я связываюсь с библиотекой, которую я скомпилировал, которая включает llist.c. К сожалению, я получаю ошибку «множественных определений» для каждого заголовка метода в llist.h. т.е.:C Linker: Несколько определений
../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. с. Просто комментируя эту часть и добавляя в фиктивный параметр, то есть:
OPP_DIRECTION(getDirToXYPOS(&curPos, &curPos)))
Он компилируется в порядке.
Это поможет, если вы покажете команды, которые используются для компиляции и компоновки. И убедитесь, что вы не добавляете 'llist.c' в проект IDE (поскольку он скомпилирован как отдельная библиотека). – Inspired
Технически сообщения об ошибках выглядят так, что вы дважды помещаете 'llist.c' в статическую библиотеку, но это не имеет смысла (однако попробуйте перекомпилировать библиотеку с нуля, удалив файл .a). И чтобы убедиться, что у вас нет 'llist.c' в вашем проекте, попробуйте ссылку без командного переключателя' -ldutil'. Если он компилируется, вы каким-то образом включили llist.c в проект. – Inspired