+ -
当前位置:首页 → 问答吧 → 交叉编译glibc出现找不到__fork_handlers的错误

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

时间:2010-06-20

来源:互联网

在给一个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
各位大侠有没有碰到过类似问题,请指点一下?

作者: Maxshine   发布时间: 2010-06-20

不给出自己参考资料,问问题很没诚意,也不利于解决问题。

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

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

作者: 聚焦深空   发布时间: 2010-06-20

引用:
作者: 聚焦深空
不给出自己参考资料,问问题很没诚意,也不利于解决问题。

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

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

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

/usr给一个而已,没打算安装,想做一个locale给ebook

作者: Maxshine   发布时间: 2010-06-20

有诚意,首贴中应该说清楚不是。

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

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

作者: 聚焦深空   发布时间: 2010-06-20

这件事情的背景是这样的:

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

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

作者: Maxshine   发布时间: 2010-06-20

找了个新的VM,编译通过。但是还是没有需要的内码so文件。make install后出现。拷贝过去生效。

作者: Maxshine   发布时间: 2010-06-21

编码转换是平台相关, 和 locale 是两回事。

前面说清楚,不早解决了。

作者: 聚焦深空   发布时间: 2010-06-21

编译通过跟说清楚没有关系。前面说清楚,您有早解决的方法么?

作者: Maxshine   发布时间: 2010-06-21

引用:
作者: 聚焦深空
有诚意,首贴中应该说清楚不是。

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

PS: 工具链做多了,最终都会使用类似方法,不是简单看下 readme 就能解决的。
readme应该是介绍最为普遍的方法,就是适应环境差异。从此入手也很正常。CLFS有的方法,在我的环境下并不适用也很正常。

作者: Maxshine   发布时间: 2010-06-21

readme 必读,文档并不止 readme。

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

PS: 有文档不参考也很愚蠢。

作者: 聚焦深空   发布时间: 2010-06-21

热门下载

更多