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

新手上路,请多包涵

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

原文由 Blackforest 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

尝试将 -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 代码时使用。

原文由 Paul R 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 user2783604 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题