C ld.exe:找不到条目符号\u start

C ld.exe:找不到条目符号\u start,c,makefile,linker,startup,infineon,C,Makefile,Linker,Startup,Infineon,将-nostlib添加到链接器标志后,我收到警告 tricore/bin/ld.exe:警告:找不到输入符号\u start;默认为c0000000 链接操作如下所示: $(OUTDIR)/$(二进制名称)。elf:$(OUTDIR)$(OBJ) $(TRICORE_工具)/bin/TRICORE gcc-Tld/iRAM.ld-Wl,--无警告标志-Wl, --gc节-Wl,-n-nostlib-o$@$(OBJ)C:\OpenSSL-Win32\lib\MinGW \libssl-1_1.a

-nostlib
添加到链接器标志后,我收到警告

tricore/bin/ld.exe:警告:找不到输入符号\u start;默认为c0000000

链接操作如下所示:

$(OUTDIR)/$(二进制名称)。elf:$(OUTDIR)$(OBJ)
$(TRICORE_工具)/bin/TRICORE gcc-Tld/iRAM.ld-Wl,--无警告标志-Wl,
--gc节-Wl,-n-nostlib-o$@$(OBJ)C:\OpenSSL-Win32\lib\MinGW
\libssl-1_1.a C:\OpenSSL-Win32\lib\MinGW\libcrypto-1_1.a

我读到
-nostlib
导致链接时不使用标准系统启动文件或库。 文件ld/iRAM.ld如下所示,据我所知,它包含_start符号,并传递给链接器:

条目(\u开始)
/*
*全球的
*/
/*程序闪存(PFLASH0)*/
__PMU\u PFLASH0\u BEGIN=0x8000000;
__PMU\u PFLASH0\u尺寸=2M;
/*程序闪存(PFLASH1)*/
........
........
部分
{
/*代码段*/
/*
*TriCore的启动代码
*/
.启动代码:
{
提供(启动代码启动=);
........
}
.....

}
链接器脚本中的
ENTRY
指令只指定入口点符号(即函数)的名称。但是,您仍然需要在一个源文件中实际提供具有此名称的函数


最可能的解决方案是将
main
函数重命名为
\u start
函数(如果有)。还请注意,
\u start
没有
argc
argv
参数,因为它们通常由标准库提供。它也不应该再回来,因为没有地方可以回去。相反,您必须调用特定于平台的退出函数:在Linux或Windows上调用syscall。但是,如果您在独立环境(即无操作系统)中工作,则可能不需要这样做。

感谢您的回答,iRAM.ld文件引用了行输入(\u start)中的(不存在)启动函数?我可以把行重命名为ENTRY(main)吗?谢谢你的帮助help@jonnyx,是的,我想您可以这样做,但这意味着您的main的唯一正确签名将是
void main()