не может скомпилировать код c - PullRequest
0 голосов
/ 08 июня 2009

Я новичок в 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

Ответы [ 6 ]

6 голосов
/ 08 июня 2009

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

4 голосов
/ 08 июня 2009

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

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

РЕДАКТИРОВАТЬ: Это легко увидеть по опубликованному коду. Отсутствующие функции (clear_list, push и т. Д.) Просто не определены в этом файле.

2 голосов
/ 08 июня 2009

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

0 голосов
/ 08 июня 2009

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

0 голосов
/ 08 июня 2009

Похоже, вам не хватает некоторых библиотек.

0 голосов
/ 08 июня 2009

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

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

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

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

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

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

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

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

[РЕДАКТИРОВАТЬ] Nvm, это явно не ваш ответ после просмотра исходного кода:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...