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

推荐答案

try 在链接器选项中添加-nostartfiles,即.

$(LINK) -nostartfiles -g ...

gcc documentation人中:

-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代码时使用.

Linux相关问答推荐

在c++编译期间,什么是linux命令,它给出了链接库的路径?

AWK打印到文件正在追加,而不是覆盖

Bash:将带有新行的字符串转换为带有逗号、内联的唯一值的字符串

在 bash 脚本中保持两个进程处于活动状态(并在死亡时重生它们)

为什么 `std::this_thread::yield()` 比 `std::this_thread::sleep_for(0s)` 慢 10 倍?

使用 ansible 验证 firewalld 配置

+后移动下一行到当前行

如何拆分和计算 Bash 中单词的出现次数?

sed 根据文件中的条件进行多次替换

如何忽略 diff 命令中的一些差异?

Linux批量转换:使用转换更改jpg的质量但保留其名称

PuTTY:更改默认 SSH 登录目录

如何在 Linux 中创建高分辨率计时器来测量程序性能?

从linux命令行写入串口

从核心转储中获取堆栈跟踪

如何运行时调试共享库?

将 jiffies 转换为毫秒

当将信号量减为零的进程崩溃时,如何恢复信号量?

Python日志(log)记录 - 判断日志(log)文件的位置?

如何获取 GNU Makefile 中使用的 shell 命令的退出状态?