LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: ukyo111

clfsv2问题请教:为什么需要编译第二次gcc

[复制链接]
发表于 2008-7-18 11:10:21 | 显示全部楼层
请问是什么原因呢?如果目标系统不使用以c++为源码的包,是不是就不必编第二次gcc呢?


是,如果你不用 c++ 的话,最后一次 gcc 可以不装,我曾经最后一次 gcc 安装时,最后一步的 make instll 没有做,但我用原来第一遍的 gcc 编译程序的时候,一直没有问题,后来在编译一个需要 c++ 的包才发现原来没有 c++ 编译器,呵呵。

不过这样的话,你需要调整,确保你的 gcc 一些默认搜索路径。

有个疑问,不知道如果最后一次 gcc 一点都不做,连 make 都不做的话,结果会不会和我上面的一样??

有高人试过没?
LZ 可以尝试一下,先做到 glibc,然后快照保存,看看能不能用
回复 支持 反对

使用道具 举报

发表于 2008-7-18 11:13:43 | 显示全部楼层
两次的prefix不一样.第一次prefix=/tools,建立工具链.第二次才是用于目录系统的.我认为第一次可以跳过.不知道讲得对不对


第一遍和第二遍的 prefix 是一样的,只是其它的一些选项不一样,像 --enable-share 什么的,两次都是用于目标系统的,我的理解是这样,高人确认一下
回复 支持 反对

使用道具 举报

发表于 2008-7-18 11:41:41 | 显示全部楼层
第一次是静态编译,不生成动态库,第二次则生成,不只是c++支持的问题


说的太笼统,这都是大家了解的。
能不能解释一下这个动态库是干吗?都是哪些文件吗?谁使用它?
还有就是第二次除了 c++ 支持外还有什么??

请指教

要编译动态库,就需要Glibc提供的启动代码。但是在完成Glibc之前我们没有这个,所以第一遍无法编译出使用动态库的gcc


说的好,请大大再稍微的解释一下 gcc 使用这个动态库干吗?是运行时库吗?
手册上关于这个库的原文是这样的:
--enable-shared
Enable the creation of the shared libraries.
--disable-shared
Disables the creation of the shared libraries.

第一遍编译的gcc是裸编译器,也就是没有任何库支持的编译器,只能编译glibc、linux-kernel等一类完全自给自足的软件包


还是两位大大总结的好啊,但小子觉得还有些不全面,呵呵!!

glibc 只需要头文件,而 linux 内核头文件和链接库都不使用,所以它们是“完全自给自足”,所以第一遍的 gcc 能够编译这些。

但这并不是说,第一遍的不能编译其它的使用动态链接库的程序,只要你已经编译了 glibc 链接库,那么第一遍的 gcc 就能用已经编译出的 glibc 链接库来编译其它的程序,并且是动态链接,只是你在运行编译出的二进制文件时需要把相应的编译时使用的链接库拷贝过去。

请各位指正
回复 支持 反对

使用道具 举报

发表于 2008-7-21 22:46:16 | 显示全部楼层
嗯,我觉得第一次产生的gcc是可以进行编译的,不过仅仅支持C语言而已。
回复 支持 反对

使用道具 举报

发表于 2008-7-22 12:09:06 | 显示全部楼层
不推荐这样做,详见
http://bbs.linuxsir.cn/thread267672-4.html
51贴
回复 支持 反对

使用道具 举报

发表于 2008-7-22 12:43:57 | 显示全部楼层
嗯,我觉得第一次产生的gcc是可以进行编译的,不过仅仅支持C语言而已。

不推荐这样做,详见
http://bbs.linuxsir.cn/thread267672-4.html
51贴


这么说,第一遍的 gcc 能够编译并动态链接目标机上的 C 程序,呵呵,这一点就够了,虽然可能没人真的去这么做,但明白的话可以更好的了解交叉工具链。

多谢两位!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表