no definition for "__iar_program_start" [program entry]


Error[Li005]: no definition for "resetHandler" [program entry] 
Fatal Error[Lp049]: there was no reference to __iar_data_init3, but it is needed to initialize section .bss (main.o #9) 

工具

IAR

起因

今天编译工程的时候,突然发现工程编译不了了,不管怎么Clean,rebuild都没用,但实际,上周六编译的都还正常。工程是别人写的,刚接手不是很熟。

真理探寻

实在没辙,只能从报错信息开始了,no definition for "resetHandler”,百度一下,但网上找到的都是no definition for "Reset_Handler",跟我的resetHandler有差别,于是看了下Reset_Handler相关的信息,有人提到IAR中的一个设置,Options->Linker->Library->Override default program entry,我看了下我项目的的设置,如下图

输入图片说明

果然resethandle在这里。按IAR最初的设置应该是这样的

输入图片说明

也就是这里应该是设置IAR启动函数的,然后我们的项目把这个函数进行了修改,于是继续查找在main()之前,IAR都做了啥?,有兴趣的可以去看看;通篇看完还是没什么发现,虽然项目修改了入口函数,但实际工作都差不多,没什么特别的。

没办法,从SVN上下载了一个比较旧的版本,之前是可以运行的,编译后发现也是报这个错,所以可以确定这个跟项目的配置没有关系,于是各个部门各种找人,一个个的问上周六到现在都有谁做了什么操作;最后发现是公司的加密策略上周改过,于是让管理人员将加密策略换回就得试试,果然编译通过。真是个大坑啊

最后加密那边发现,开发相关的文件默认是不加密的,但.o文件加了密,所以导致最后编出来的文件也不对。

希望这个教训对你也有帮助。

资料

在main()之前,IAR都做了啥?

猜你喜欢

转载自my.oschina.net/noke/blog/1788101