Newlib移植成功

把Newlib移植到MyOS后,用printf测试的时候,总有问题。上网查找了很多资料,最终找到一篇关于Newlib的printf的帖子,作者在移植newlib的时候,碰到了和我一样的问题。于是,昨天晚上给作者发了封邮件,希望能够得到帮助。

这时我第一次和老外发邮件,真有点担心自己的英文水平那么烂,老外能不能看懂。为了少暴露问题,所有就写了封很简短的邮件,发了出去。今天早上来公司以后,收到了回复。从这一点上,我很喜欢老外。 虽然没有告诉我解决方法,不过提到了是不是我的系统调用实现的有问题。我同时也移植了别的libc,证明我的系统调用是对的,所有就回复说没有问题,并问他是不是有别的需要注意的地方。后来,我左思右想,觉得第一个printf对,第二个没反应,肯定还是那不对。后来发现,当第一个printf结束时,write系统调用的返回值错了。一看代码,终于发现了问题。原来程序执行时,并没有自动打开标准输入、标准输出、标准输出(因为MyOS是基于GUI的),这样当调用printf时,文件其实是不存在的,这样最终调用到write系统调用时,文件无效。原先的做法是输出,然后死循环。不过为了让程序正常运行,后来把死循环去掉了,但忘了加入正确的return,结果返回了错误的-1。修改之后,终于正常工作了。呵呵。

说到这儿,我又想到了一个问题。就是程序有问题时,我们总怀疑是别人的代码不对,可最终结果往往证明是自己错了,尤其是那些历史已经很久的代码。所有,我经常说,碰到问题,基本上不用怀疑是别人错了,肯定是自己的代码有问题。因为如果是使用的库有问题的话,也早就有人发现了。
阅读更多

没有更多推荐了,返回首页