一尘不染

crt1.o:在函数“ _start”中:-在Linux中未定义对“ main”的引用

linux

我正在将应用程序从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)

阅读 1093

收藏
2020-06-02

共1个答案

一尘不染

尝试添加-nostartfiles到您的链接器选项,即

$(LINK) -nostartfiles -g ...

gcc文档中

-nostartfiles
    Do not use the standard system startup files when linking. The standard system libraries are used normally, unless -nostdlib or -nodefaultlibs is used.

这将导致crt1.o不被链接(通常默认情况下为链接)-通常仅在实现自己的_start代码时使用。

2020-06-02