到底要做些什么
有些话,不写就溜走了

glibc

dancefish posted @ 2010年6月23日 18:35 in 书摘 , 2108 阅读

 

 

 历史证明,这是另一段disgusting 的旅程。。。

 

再恶心的旅程也要记录清楚,否则,下次岂不是更恶心了。。。

 

恶心之处在于,过程狠迷茫,这个工具做出来之后,根本没有人负责,文档很少,怎么编译根本不知道。

只能结合网上的留言来慢慢摸索。

 

之前恶心的几步回头再说,先说说现在恶心的步骤:

glibc要交叉编译,需要glibc-ports的支持,这个包是单独的,下载过后要解压并复制为glibc文件下的ports文件夹。

至于其余的patches从哪里下载和是否需要。。。下段分解。

关于参考文档,一开始觉得,应该是clfs比较正统,但是上面提到的ports再clfs里面并没有提到(是我看的不够仔细还是版本太老?)。

现在发觉龙芯lfs也是蛮正规的,现在两个都参考着呢。。。又报错了:我多么希望一遍到底。。。。

 

找不到config-name.h这个文件。这个文件是用来编译uname的,再仔细一看。。。uname提供的那几个参数基本上都是这个文件里定义的。。。

这个文件是configure glibc的时候自动生成的,这下问题就来了,configure的时候是怎么生成的这个文件呢,为什么我们的情况没又生成呢?

只好先手工写了一个蒙混过关了事。。。噢。。没有了事。。。也没有蒙混。。。这叫做并行处理。。。well done boy

。。。果然又出错了。。。

 

redefinition of "__stat" : 杠杠stat有重复定义, 其中一个定义在 ../include/sys/stat.h里面,另外一个在哪?glibc-2.9/io/stat.c : 50 在这里。。。

那就去glibc里面看看咯:我晕,这个文件就定义了这么一个函数。。。。。。。两个地方确实重复定义了。。看看咯。。。

加了一行 libc_cv_gnu89_inline =yes  到config.cache试试(config.cache是干吗的呢?)。过了,马上又出错了。。。libgcc找不到,这个还蛮乐观。

因为之前就发现在编译gcc442的时候只是编译了 make all-gcc这个target,后来在别人处还发现make  all-target-libgcc这个target

现在终于到了还债的时候了。。好在这个target狠顺利。但是继续报错 , 狠不乐观的看到 -lgcc_eh 找不到了。。。。

这个libgcc_eh.a是要在编译gcc的时候enable-shared才能编出来的。。。好吧。。。重编gcc吧,希望可以成功。。。。或者说可以到下一个错误。。

 

显然glibc没这么好搞定,enable-shared需要crti.o这个文件,这个文件是谁生的?反正不是我。。。。。

这个看lfs狠明白的发现,lfs自己出了个patch把这个链接步骤给屏蔽了。。。。

不幸的是lfs的patch只是针对glibc28版本的,于是折腾到28版本,新的错误产生了。。。。真他妈锻炼人。。。

幸而找到一个29版的patch,打上了,编的风声水气。。。一气呵成。。。。一炮走红。。。总之是过了。。。

 

小忐忑的install一下:没想到这安装也是轰轰烈烈的,好在美出错。。。

再把gcc - full 搞定就算是拿下一城了。。。

结果噩梦 fixincludes又来了。。。。也算老朋友啦,看来要用clfs的几个神补丁来搞定之咯。。。。 

 

 这个和前面那个错误是一样的,crt1.o找不到。是时候搞定这个家伙了。。。

妖精是妖精他妈生的,crt1.o就是glibc生的,glibc的安装文件夹赫然在列,当初拿你没办法,现在可是收到擒来,先用ldconfig试试。

慢着,交叉编译哪来ldconfig???好吧,先用LD_LIBRARY_PATH吧 

貌似要用一个叫做crosstool的东西?问题狠简单,就是ld找不到那个文件而已。。。可是我要怎么和ld对话呢。。。ld,你好。。。

 由config.log 查到 xgcc 的查询路径,并且由查询路径查到,xgcc都再哪里搜索这个crt1.o  再把这些库拷到那里就可以了。。。

这个方法有点亡羊补牢。。。但是还是push through了一点点呢。。。其实这个问题不是无缘无故的造成的。。。

而是由于编译过程中路径的管理过于混乱,所谓路径管理,就是说在confgure的过程中,指定的路径不仅仅会影响到安装过程。

而且,特别是对于编译工具而言,这个路径还会影响到起搜索路径,所以这个prefix在指定的时候要仔细些。

 

下面遇到的问题就比较乐观了,被用来测试的程序不能运行。。。废话,交叉编译当然不能运行啦。。。。

话说回来这个编译出来的a.out到底是哪个平台的?当然是目标平台,否则还链crt1.o干吗。

这就有趣了,我们现在编译的是交叉编译工具,这些工具是在x86平台上运行的编译工具,因此也是x86平台的程序。

那么在配置的阶段,对这个xgcc的测试为什么要用交叉编译呢。。。这显然是不对,不知到是我配置错了,还是配置本来就是错的。。。。

只好改configure文件。。。我妈也不想这样。。。 

这样想来,确实由蹊跷的地方,为什么这个编译过程中xgcc要使用交叉编译?如果不是呢?还有就是为什么xgcc会指到了mips的ld呢。。。。

这个倒是最蹊跷的地方。。。。

 

(6月24号)补充,昨天之前其实还遇到一点,配置后,make ,直接出错,因为glibc-2.10.1的目录里面没有all这个目标。

今天用CLFS时候,也遇到了同样的问题,用了CFLS里面的一个sed招之后就好了:

这句是这样的:

sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig

很神的一句,先敬下了。。。。

Avatar_small
NCERT Gk Sample Pape 说:
2022年9月26日 15:27

NCERT 9th Class GK Sample Paper 2023 Pdf published along with learning & study material of the course to know the new exam scheme or question paper style for SA1, SA2, FA1, FA2, FA3, FA4 and Assignment Exams held in Term1 & Term2 or Session 1 & Session 2 of the course to the academic year of 2023. NCERT Gk Sample Paper Class 9 Students of the 9th Standard can download and study the NCERT GK Sample Paper 2023 to get the complete structure of the exam.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter