【发布时间】:2012-06-22 09:40:43
【问题描述】:
我正在将一个应用程序从 Solaris 移植到 Linux
链接的目标文件没有定义 main()。但编译和链接在 Solaris 中正确完成并生成了可执行文件。在 Linux 中我得到这个错误
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
我的问题是,我不能包含新的 .c/.o 文件,因为它是一个庞大的应用程序并且已经运行了多年。我怎样才能摆脱这个错误?
makefile 的代码摘录:
RPCAPPN = api
LINK = cc
$(RPCAPPN)_server: $(RPCAPIOBJ)
$(LINK) -g $(RPCAPIOBJ) -o $(RPCAPPN)_server $(IDALIBS) $(LIBS) $(ORALIBS) $(COMMONLIB) $(LIBAPI) $(CCLIB) $(THREADLIB) $(DBSERVERLIB) $(ENCLIB)
【问题讨论】:
-
简单:要么停止调用main,要么定义一个main(^) 为什么它在solaris 上有效?它是否有特殊的链接器标志(链接到共享对象?)
-
但 ctr1.o 是操作系统定义的对象文件,存在于 /usr/lib64 中。因此调用 main() 不能改变。
-
视情况而定!如果你使用
boost,那么试试@serup 的answer,它对我有用
标签: linux main undefined-reference