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

Bla*_*est 34 linux program-entry-point undefined-reference

我正在将应用程序从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' 
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不能包含新的.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)
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 35

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

$(LINK) -nostartfiles -g ...
Run Code Online (Sandbox Code Playgroud)

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. 
Run Code Online (Sandbox Code Playgroud)

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

  • 取决于问题,那么这不是一个真正的解决方案 - 我在尝试制作增强测试项目时遇到了类似的问题并且添加此标志使一切变得更糟 (5认同)
  • 这对我也不是一个好的解决方案。使用此标志后,我得到:“ / usr / bin / ld:警告:找不到条目符号_start;默认为00000000004562d0” (2认同)

小智 22

-shared 编译时必须使用链接选项 .so

  • 这实际上帮助我安装了以前因上述错误而失败的R软件包. (5认同)
  • 同意;这也帮助我解决了为sqlite编译外部函数的问题。 (2认同)

Mos*_*aev 8

对我来说问题是,我错误地放入int main()了命名空间。确保不要这样做,否则您会收到这个恼人的链接错误。

希望这对任何人都有帮助:)