LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 858|回复: 9

交叉编译glibc出现找不到__fork_handlers的错误

[复制链接]
发表于 2010-6-20 11:56:41 | 显示全部楼层 |阅读模式
在给一个ARM平台编译一个glibc2.6.1,出现如下错误:

mv -f /home/user/glibc-build/shlib.ldsT /home/user/glibc-build/shlib.lds
arm-poky-linux-gnueabi-gcc   -shared -static-libgcc -Wl,-O1  -Wl,-z,defs -Wl,-dynamic-linker=/lib/ld-linux.so.3  -B/home/user/glibc-build/csu/  -Wl,--version-script=/home/user/glibc-build/libc.map -Wl,-soname=libc.so.6 -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -nostdlib -nostartfiles -e __libc_main -L/home/user/glibc-build -L/home/user/glibc-build/math -L/home/user/glibc-build/elf -L/home/user/glibc-build/dlfcn -L/home/user/glibc-build/nss -L/home/user/glibc-build/nis -L/home/user/glibc-build/rt -L/home/user/glibc-build/resolv -L/home/user/glibc-build/crypt -L/home/user/glibc-build/nptl -Wl,-rpath-link=/home/user/glibc-build:/home/user/glibc-build/math:/home/user/glibc-build/elf:/home/user/glibc-build/dlfcn:/home/user/glibc-build/nss:/home/user/glibc-build/nis:/home/user/glibc-build/rt:/home/user/glibc-build/resolv:/home/user/glibc-build/crypt:/home/user/glibc-build/nptl -o /home/user/glibc-build/libc.so -T /home/user/glibc-build/shlib.lds /home/user/glibc-build/csu/abi-note.o /home/user/glibc-build/elf/soinit.os /home/user/glibc-build/libc_pic.os /home/user/glibc-build/elf/sofini.os /home/user/glibc-build/elf/interp.os /home/user/glibc-build/elf/ld.so -lgcc
/home/user/glibc-build/libc_pic.os: In function `fork_handler_alloc':
/home/user/glibc-2.6.1/nptl/../nptl/sysdeps/unix/sysv/linux/register-atfork.c:63: undefined reference to `__fork_handlers'
/home/user/glibc-build/libc_pic.os: In function `__unregister_atfork':
/home/user/glibc-2.6.1/nptl/../nptl/sysdeps/unix/sysv/linux/unregister-atfork.c:95: undefined reference to `__fork_handlers'
/home/user/glibc-build/libc_pic.os: In function `__libc_pthread_init':
/home/user/glibc-2.6.1/nptl/../nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c:78: undefined reference to `__fork_generation_pointer'
/home/user/glibc-build/libc_pic.os: In function `free_mem':
/home/user/glibc-2.6.1/nptl/../nptl/sysdeps/unix/sysv/linux/register-atfork.c:135: undefined reference to `__fork_handlers'
/usr/local/poky/eabi-glibc/arm/lib/gcc/arm-poky-linux-gnueabi/4.3.0/../../../../arm-poky-linux-gnueabi/bin/ld: /home/user/glibc-build/libc.so: hidden symbol `__fork_handlers' isn't defined
/usr/local/poky/eabi-glibc/arm/lib/gcc/arm-poky-linux-gnueabi/4.3.0/../../../../arm-poky-linux-gnueabi/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
make[1]: *** [/home/user/glibc-build/libc.so] Error 1
make[1]: Leaving directory `/home/user/glibc-2.6.1'
make: *** [all] Error 2


在configure阶段,用的是如下配置:
../glibc-2.6.1/configure --host=arm-poky-linux-gnueabi --enable-add-ons --with-binutils=/usr/local/poky/eabi-glibc/arm/arm-poky-linux-gnueabi/bin/ --with-include=/usr/local/poky/eabi-glibc/arm/arm-poky-linux-gnueabi/usr/include/ -without-gd --build=i686-pc-linux-gnu --disable-sanity-checks --prefix=/usr


各位大侠有没有碰到过类似问题,请指点一下?
发表于 2010-6-20 13:42:45 | 显示全部楼层
不给出自己参考资料,问问题很没诚意,也不利于解决问题。

启用 NTPL,建立交叉编译工具链过程中,配置 glibc 时,需设置下 config.cache,参考 CLFS 手册即可。
http://cross-lfs.org/view/1.1.0/x86/cross-tools/glibc.html

PS: 安装交叉编译工具链到 /usr 很愚蠢,需要 root 权限,稍有不慎即可毁掉宿主系统;
不要争论说某某发行版如此如此,老油条做这些自有分寸,小油条还是小心为上;
习惯上,最好单独新建一用户,安装工具链到其家目录,或安装到 /opt。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-20 14:37:13 | 显示全部楼层
Post by 聚焦深空;2097561
不给出自己参考资料,问问题很没诚意,也不利于解决问题。

启用 NTPL,建立交叉编译工具链过程中,配置 glibc 时,需设置下 config.cache,参考 CLFS 手册即可。
http://cross-lfs.org/view/1.1.0/x86/cross-tools/glibc.html

PS: 安装交叉编译工具链到 /usr 很愚蠢,需要 root 权限,稍有不慎即可毁掉宿主系统;
不要争论说某某发行版如此如此,老油条做这些自有分寸,小油条还是小心为上;
习惯上,最好单独新建一用户,安装工具链到其家目录,或安装到 /opt。

参考资料就是glibc的readme。不是做LFS,没有config.cache这些speicific的东西。

诚意这东西你怎么看出来。

/usr给一个而已,没打算安装,想做一个locale给ebook
回复 支持 反对

使用道具 举报

发表于 2010-6-20 17:18:52 | 显示全部楼层
有诚意,首贴中应该说清楚不是。

没必要做工具链,locale 只是数据,平台无关,可从其它系统同版本二进制软件包中拷贝。

PS: 工具链做多了,最终都会使用类似方法,不是简单看下 readme 就能解决的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-20 17:30:22 | 显示全部楼层
这件事情的背景是这样的:

一个ebook,它没有gbk的内码。所以不能显示chm这些文件的中文。ebook的主人说是缺少/usr/lib/gconv/gbk.so这些东西。用file查了下应该是ARM的ELF格式的库文件。网上找到一个方法是用localedef来做,但是这个ebook自带环境没有这个工具。所以就想编译glibc,拿到localedef,最好能直接得到需要的gbk.so这些东东。

我不了解i18n。像目前的需求是能读取中文内容及正确编码,应该需要给系统添加相应的内码就行,而不需要修改统的locale。添加内码支持,需要哪些资源和库呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-20 20:51:58 | 显示全部楼层
找了个新的VM,编译通过。但是还是没有需要的内码so文件。make install后出现。拷贝过去生效。
回复 支持 反对

使用道具 举报

发表于 2010-6-20 21:32:10 | 显示全部楼层
编码转换是平台相关, 和 locale 是两回事。

前面说清楚,不早解决了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-20 23:40:07 | 显示全部楼层
编译通过跟说清楚没有关系。前面说清楚,您有早解决的方法么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-20 23:46:10 | 显示全部楼层
Post by 聚焦深空;2097598
有诚意,首贴中应该说清楚不是。

没必要做工具链,locale 只是数据,平台无关,可从其它系统同版本二进制软件包中拷贝。

PS: 工具链做多了,最终都会使用类似方法,不是简单看下 readme 就能解决的。


readme应该是介绍最为普遍的方法,就是适应环境差异。从此入手也很正常。CLFS有的方法,在我的环境下并不适用也很正常。
回复 支持 反对

使用道具 举报

发表于 2010-6-21 00:27:01 | 显示全部楼层
readme 必读,文档并不止 readme。

建立交叉编译工具链单看 readme 不够。
相关文档中 CLFS 比较简明。
不参考文档,那就要适当读源代码。

PS: 有文档不参考也很愚蠢。
回复 支持 反对

使用道具 举报

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

本版积分规则

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