我已经阅读了关于这个主题的其他答案,不幸的是,它们对我没有帮助。我正在尝试将几个c程序链接在一起,但我得到了一个错误的响应:
$ gcc -o runexp.o scd.o data_proc.o -lm -fopenmp
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
make: * [runexp] Error 1
我只有一个main函数,它在runexp中。表格是
int main(void) {
...;
return 0;
}
有没有想过为什么我会得到这个错误?谢谢!
发布于 2013-04-09 22:51:58
您应该在-o
选项之后提供输出文件名。在本例中,runexp.o
被视为输出文件名,而不是输入目标文件,因此您的main
函数是未定义的。
发布于 2013-04-09 22:52:45
编译时没有包含包含main()
的C文件,因此链接器看不到它。
您需要添加它:
$ gcc -o runexp runexp.c scd.o data_proc.o -lm -fopenmp
发布于 2017-02-01 10:12:51
通常,您可以通过以下方式编译大多数.c文件:
gcc脚下c -o脚下。它可能会根据您使用的#includes或是否有任何外部.h文件而有所不同。通常,当您有一个C文件时,它看起来有点像下面这样:
#include <stdio.h>
/* any other includes, prototypes, struct delcarations... */
int main(){
*/ code */
}
当我得到一个“未定义的对main的引用”时,这通常意味着我有一个没有int main()
的.c文件。如果你是第一次学习java,这是一种可以理解的混淆方式,因为在Java中,你的代码通常如下所示:
//any import statements you have
public class Foo{
int main(){}
}
我建议看看你的顶部是否有int main()
。
https://stackoverflow.com/questions/15905119
复制相似问题