免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4204 | 回复: 9
打印 上一主题 下一主题

交叉编译glibc出现找不到__fork_handlers的错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-20 04:18 |只看该作者 |倒序浏览
在给一个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

各位大侠有没有碰到过类似问题,请指点一下?

论坛徽章:
0
2 [报告]
发表于 2010-06-20 12:30 |只看该作者
hack code

论坛徽章:
0
3 [报告]
发表于 2010-06-20 15:42 |只看该作者
本帖最后由 Maxshine 于 2010-06-20 16:24 编辑

回复 2# ah13k


    看了fork.c和fork.h,以及出错的几个地方。发现一个地方,fork.c中定义了全局变量__fork_handlers如下:
  1. struct fork_handler *__fork_handlers;
复制代码
而其头文件fork.h中为
  1. extern struct fork_handler *__fork_handlers attribute_hidden;
复制代码
这个attribute_hidden有什么含义呢?

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [报告]
发表于 2010-06-20 18:50 |只看该作者
> 这个attribute_hidden有什么含义呢?
看起来像是一个宏,会被扩展为一个属性。有点像是下面这个属性,

visibility ("visibility_type")
This attribute affects the linkage of the declaration to which it is attached. There are four supported visibility_type values: default, hidden, protected or internal visibility.
          void __attribute__ ((visibility ("protected")))
          f () { /* Do something. */; }
          int i __attribute__ ((visibility ("hidden")));


参见 http://gcc.gnu.org/onlinedocs/gc ... Function-Attributes

论坛徽章:
0
5 [报告]
发表于 2010-06-20 18:57 |只看该作者
没有编译过

论坛徽章:
0
6 [报告]
发表于 2010-06-20 20:08 |只看该作者
回复 3# Maxshine


    不清楚。如果我没猜错,大概意思就是让这个结构体的成员不能被访问。具体你参考gcc官方。

论坛徽章:
0
7 [报告]
发表于 2010-06-20 23:50 |只看该作者
回复 6# ah13k


    谢谢。另外一个帖子里问了这个问题。这是phy0077 大的回答:

phy0077 发表于 2010-06-20 16:53


不是attribute_hidden本身引起的问题,因为fork.c中也有对fork_handler引用没有出错。

后来重新手动做了一遍编译环境,这个地方通过了。两次的kernel不一样,可能是问题所在。

论坛徽章:
0
8 [报告]
发表于 2010-06-21 10:13 |只看该作者
回复 7# Maxshine


    不清楚,因为我没有自己编译过,我不过是瞎猜罢了,建议你看看官方的faq

论坛徽章:
0
9 [报告]
发表于 2010-06-22 09:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2010-06-22 15:19 |只看该作者
arm-linux-gcc 编译的?
先看下INSTALL和Makefile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP