2009-06-08 3 views
0

Я новичок в C, и я не могу скомпилировать программу, которую я загрузил. ErrorMessage выглядит следующим образом:не может скомпилировать код c

********@*******:~/Desktop/GRAPPA20$ gcc all_sorting_reversals.c 
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start': 
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main' 
/tmp/ccwl1p7v.o: In function `find_all_sorting_reversals': 
all_sorting_reversals.c:(.text+0x536): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x55c): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x5c5): undefined reference to `push' 
all_sorting_reversals.c:(.text+0x5fe): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x61f): undefined reference to `clear_list' 
all_sorting_reversals.c:(.text+0x71d): undefined reference to `push' 
all_sorting_reversals.c:(.text+0x767): undefined reference to `list_size' 
all_sorting_reversals.c:(.text+0x791): undefined reference to `list_size' 
all_sorting_reversals.c:(.text+0x7fe): undefined reference to `list_size' 
all_sorting_reversals.c:(.text+0x830): undefined reference to `list_get' 

Кодекс можно увидеть: http://pastebin.com/d749ec13a

+3

Можете ли вы разместить свой C-код? – NinethSense

+0

Конечно, я отредактировал мое первое сообщение :) – n00ki3

ответ

4

Это ошибка линкера. Это происходит потому, что компоновщик не может найти реализацию определенных функций. В этом случае функции не выглядят так, как будто они из библиотеки. Поэтому наиболее вероятной причиной является то, что вы не компилируете во всех исходных файлах C.

Вы проверили, имеет ли программа файл make?

EDIT: Это легко увидеть из вашего опубликованного кода. Отсутствующие функции (clear_list, push и т. Д.) Просто не определены в этом файле.

-3

Похоже, вы должны направить объявить все.

В C компилятор читает все сверху вниз, поэтому, если вы вызываете метод, а метод определен ниже в коде, вам нужно переслать его.

Например, это не будет работать:

int main() 
{ 
    doStuff(); 
    return 0; 
} 
void doStuff() 
{ 
    int foo = 3; 
} 

.. но это будет:

void doStuff() 
{ 
    int foo = 3; 
} 
int main() 
{ 
    doStuff(); 
    return 0; 
} 

Другая возможность заключается в том, что вы пытаетесь скомпилировать C++ код с компилятором. Списки обычно создаются как классы, поэтому, если у вас есть какое-либо объявление класса в коде, это C++ :)

Опять же, вам необходимо опубликовать код (или ссылку на него), из-за чего вы не можете отправлять сообщения дать вам определенный ответ.

[EDIT] Nvm, это явно не ваш ответ после просмотра исходного кода :)

+0

Ваши два фрагмента кода идентичны ... – ChrisF

+0

Исправлено это для него. Я предполагаю, что он решил переключить порядок main и doStuff во втором фрагменте – PaulJWilliams

+0

. Я не был уверен, почему я его оставил. – ChrisF

6

Похоже, что all_sorting_reversals.c не содержит метода main() и предполагает, что он будет связан с другими объектами/библиотеками, которые предоставляют другие отсутствующие методы (list_get, list_size и т. Д.).

2

кажется, что вы не компилировать все файлы, необходимые, вы только скомпилировать один файл-что, в свою очередь, не имеет главную функцию

0

Похоже, что вы можете упустить некоторые библиотеки.

-2

Похоже, что определение функций, таких как «clear_list», «push» и т. Д., Невозможно найти. Найдите библиотеки/объекты/файлы, содержащие это определение, а затем проверьте, правильно ли они связаны с вашим приложением.

Смежные вопросы