# ./configure
# make
.....省略中间打印.....
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

为什么会报“undefined reference to `main'”?
当然我写了main函数。

最后清醒了一下脑子,发现自己是Makefile.am中的“-I选项”少包含了main函数所在的目录。

搜索过程中也发现别人有的说要"-L"要包含当前目录的"-L ."。那种情况是引用的动态库在当前目录。

也有人说少头文件的,少编译选项“-lrt -ldl”

总结

也就是出问题,要检查以下几个地方:
(1)Makefile有没有覆盖到main函数;(比如你把main函数赋值给一个变量MAINCPP,引用变量的时候没有使用$(MAINCPP),结果报错)
(2)有没有包含到需要的头文件目录;
(3)有没有包含到需要的库文件目录;
(4)有没有包含到库文件所需的库,比如依赖sqlite.a同时编译时可能要加上-lpthread -lrt -ldl等选项。
(5)有没有包含到".o"文件的目录。

posted on 2020-06-19 17:57  步孤天  阅读(26659)  评论(0编辑  收藏  举报