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()
。