上班啦^_^,遇到第一个问题。
背景是公司用的代码是一套很早的外国人写的,公司的牛人鼓捣很久下编译出来了,用的是arm-uclibc-gcc工具链(这里这么说对不对我也不清楚,我对GCC一窍不通)。IDE是keil3,操作系统是winXP。牛人说这个用别的IDE和系统编译不了。
我接手的时候用着很不爽,不管是操作系统还是IDE。后来牛人在虚拟机上测试说不用xp也能正常编译,于是我就把xp卸了装了win7,结果牛人说,他看错了,win7不能编译(哭)。
没办法,已经卸了,鼓捣着看吧,重新装了win7和keil5,重装工具链(工具链装完一定要重启下),然后测试,果然会出现很多错误,主要有.S文件编译.O文件错误,还有什么对地址分配错误(就是文章标题的错误)。
.S文件编译时提示的错误:
/cygdrive/c/Cygnus/arm-tools/bin/arm-uclibc-as: unrecognized option `--gdwarf-2'
地址分配的错误:C:\Cygnus\arm-tools\bin\arm-uclibc-gcc.exe: *** heap allocated but not at 0x620000
1 [main] arm-uclibc-gcc 4172 sync_with_child: child 4020(0x11C) died before initialization with status code 0x1
1240 [main] arm-uclibc-gcc 4172 sync_with_child: *** child state waiting for longjmp
一个一个解决吧,.S文件编译的问题只查到一个帖子,老外的,说什么debug information会影响,很快找到keil的Options for Target下得output菜单栏里有这个选项,去掉后奇迹的发现可以了,老外还是很靠谱的。哈哈。
第二个问题找了很多没发现有人说,而且也不好描述这个问题,后来想xp下能用win7下不能用,会不会是编译器兼容性问题,于是根据错误信息,找到编译器exe文件,选择兼容性,改为兼容xp(改兼容性玩游戏的应该都知道,不多说),再次使了下,好了(内牛满面)。
算是新工作后解决的第一个问题吧,而且网上没有说什么解决的,虽然解决方法很简单(很弱智好么),但还是打个标记,自己记下吧。