我已经阅读了关于这个主题的其他答案,不幸的是他们没有帮助我。我试图将几个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
我只有一个主要功能,它在runexp中。表格是
int main(void) {
...;
return 0;
}
有关为什么我会收到此错误的任何想法?谢谢!
答案 0 :(得分:22)
您应该在-o
选项后提供输出文件名。在您的情况下,runexp.o
被视为输出文件名,而不是输入对象文件,因此您的main
函数未定义。
答案 1 :(得分:5)
编译时,您不包含包含main()
的C文件,因此链接器没有看到它。
您需要添加它:
$ gcc -o runexp runexp.c scd.o data_proc.o -lm -fopenmp
答案 2 :(得分:1)
您正在通过运行此命令覆盖目标文件runexp.o
:
gcc -o runexp.o scd.o data_proc.o -lm -fopenmp
实际上,-o
用于输出文件。
你需要运行:
gcc -o runexp.out runexp.o scd.o data_proc.o -lm -fopenmp
runexp.out 将是您的二进制文件。
答案 3 :(得分:0)
通常,您可以通过以下方式编译大多数.c文件:
gcc foo.c -o foo。它可能会根据您使用的#includes或您是否有任何外部.h文件而有所不同。通常,当您有一个C文件时,它看起来有点像:
#include <stdio.h>
/* any other includes, prototypes, struct delcarations... */
int main(){
*/ code */
}
当我得到'未定义的对main的引用'时,通常意味着我的.c文件在文件中没有int main()
。如果您第一次学习java,这是一种可以理解的混淆方式,因为在Java中,您的代码通常如下所示:
//any import statements you have
public class Foo{
int main(){}
}
我建议您查看顶部是否有int main()
。