无法编译c代码

时间:2009-06-08 10:22:54

标签: c compilation

我是C的新手,我无法编译我下载的程序。 Errormessage看起来像这样:

    ********@*******:~/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 个答案:

答案 0 :(得分:6)

似乎all_sorting_reversals.c不包含main()方法,它希望与提供其他缺失方法的其他对象/库链接(list_get,list_size等)。

答案 1 :(得分:4)

这是链接器错误。这是因为链接器无法找到某些功能的实现。在这种情况下,函数看起来不像是来自库。因此,最可能的原因是您没有编译所需的所有C源文件。

您是否检查过该程序是否有make文件?

编辑:很容易从您发布的代码中看到这一点。缺少的函数(clear_list,push等)根本没有在该文件中定义。

答案 2 :(得分:2)

好像你没有编译所需的所有文件,你只编译一个文件 - 而后者又没有主函数

答案 3 :(得分:0)

看起来你可能会遗漏一些图书馆。

答案 4 :(得分:-2)

似乎无法定位诸如“clear_list”,“push”等功能的定义。查找包含这些定义的库/对象/文件,然后验证它们是否与您的应用程序正确链接。

答案 5 :(得分:-3)

看起来你需要转发声明一切。

在C中,编译器从上到下读取所有内容,因此如果调用方法,并且在代码中进一步定义了该方法,则需要转发声明它。

例如,这不起作用:

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

..但这会:

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

另一种可能性是您正在尝试使用C编译器编译C ++代码。列表通常是作为类创建的,所以如果你的代码中有任何类的decleration,它就是C ++:)

同样,你需要发布代码(或链接到它),因为从这些消息中,我们无法给你一个明确的答案。

[编辑] Nvm,看到源代码后,这显然不是你的答案:)