u-boot编译为什么还需要glibc的头文件?交叉编译,glibc和内核到底谁依赖谁?
时间:2008-10-29
来源:互联网
我在windows下用MinGW+MSYS+GNUARM来交叉编译u-boot,提示一些头文件找不到,查了一下,是glibc库中的文件。
我感到很奇怪,按照我的理解,bootloader编译时需要的头文件应该全部都在它的代码包中,而不应该再依赖其它的头文件了吧。
因为它不应该依赖别的包运行才对啊。bootloader运行时还根本没有运行时库这么一说呢。
进一步想想,如果必须要glibc包的话,我只能下一份glibc的源码包自己做交叉编译对吧?而且不能下devel包,因为devel包中已经编译好的lib文件应该不是arm处理器的机器码。
而再进一步想,c运行时库的实现应该是高度依赖具体的操作系统的啊,比如基本的文件读写,一定得产生具体的系统调用才能完成。那么我要是想交叉编译glibc,就不得不先找一份linux的源码,先交叉编译整个嵌入式linux系统!
然后刚才又上网查了一下,更是晕死,编译内核需要glibc包的支持……
这不成了先有鸡还是先有蛋的问题了么。
哪位高手,明白人,帮我梳理一下这团乱糟糟的思路,不胜感激!
作者: true_log 发布时间: 2008-10-29
作者: qqdao 发布时间: 2008-11-01
现在我再次仔细看了一下细节,发现需要glibc库文件支持的是u-boot/tools之中的可执行文件,也就是说,这个可执行文件应该是用我的系统中的gcc编译,并依赖当前系统中安装的c运行库的本地代码,跟u-boot无关才对。出错的原因显而易见,MinGW用的是自己的c运行库,系统中根本没有glibc嘛。看来我没法在windows系统中编译这些工具了,除非想办法把源代码向MinGW移植,但现在没时间,我还是老老实实地到虚拟机里去编译的好。
我想u-boot自身的编译应该是不用额外的库或头文件支持才是,无奈我make中上一步出错,还到不了编译u-boot的那一步。稍后我得验证一下。
这两天愁于这个问题四处瞎转,终于看到LinuxSir上的大牛youbest写的《clfs2.0原理分析》,茅塞顿开的同时也感慨,从一个看起来很小的问题,竟然扯出来这么复杂的一大套东东,呵呵。
btw:另外我也支持楼上的观点,内核的编译应该是不依赖什么额外的库或头文件的吧。虽然我还没有实际验证过,但想来如此。
我自己的两个问题,现在按照我自己的理解大致解释两句,不对的话请指正。
1. 首先,linux内核的编译应该不依赖于其他库。我们应该可以通过使用特定的参数,编译得到内核头文件。
2. glibc的工作是需要内核的支持的,所以编译glibc的时候需要用到特定版本的内核头文件,由上一步可以得到。(我想是不是直接从内核源码里拷贝出来也可以,呵呵。)
作者: true_log 发布时间: 2008-11-01
作者: hanchao3c 发布时间: 2008-11-05
作者: hanchao3c 发布时间: 2008-11-05
作者: robinswan 发布时间: 2008-11-15
作者: hanchao3c 发布时间: 2008-12-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28