【发布时间】:2013-03-07 17:19:21
【问题描述】:
我正在尝试构建 OpenWebOS,并且只是按照build-webos GitHub README 中的计划进行。我正在使用全新的 32 位 Ubuntu 12.10 安装。事情有些坎坷。
但是,通过这里和那里的调整,我设法在错误出现之前达到了 2500 或(或其他)的第 350 步。问题是构建glibc的依赖,它在抱怨
(...)/sysdeps/i386/start.S:107: undefined reference to `__libc_csu_fini'
(...)/sysdeps/i386/start.S:108: undefined reference to `__libc_csu_init'
在网上搜索会发现很多人在不构建 glibc 时遇到这种情况:
ld complains: in function "_start", undefined reference to "__libc_csu_fini" & "__libc_csu_init"
Linking a C program directly with ld fails with undefined reference to `__libc_csu_fini`
但这是在构建自定义嵌入式 LIBC: eglibc 的过程中。所以有点不同,我能找到的最接近的案例是这个2009 thread on an OpenEmbedded list。我不知道如何将他们的补丁应用到令人困惑的 WebOS 构建结构的“bakefile”世界中,这令人眼花缭乱。
失败的命令行怪物我将“简化”到以下几点:
gcc -m32 -march=i586 --sysroot=/home/webos/build-webos/BUILD-qemux86/sysroots/qemux86-tcbootstrap -nostdlib -nostartfiles -o iconv/iconvconfig -Wl,-dynamic-linker=/ lib/ld-linux.so.2 -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=两者 csu/crt1.o csu/crti.o `gcc -m32 -march= i586 --sysroot=/home/hostilefork/Projects/webos/build-webos/BUILD-qemux86/sysroots/qemux86-tcbootstrap --print-file-name=crtbegin.o` iconv/iconvconfig.o iconv/strtab.o iconv /xmalloc.o iconv/hash-string.o -Wl,-rpath-link=/home/webos/build-webos/BUILD-qemux86/work/i586-webos-linux/eglibc-2.16-r15+svnr20393/build- i586-webos-linux:math:elf:dlfcn:nss:nis:rt:resolv:crypt:nptl libc.so.6 libc_nonshared.a -Wl,--根据需要 elf/ld.so -Wl,--no -按需 -lgcc `gcc -m32 -march=i586 --sysroot=/home/webos/build-webos/BUILD-qemux86/sysroots/qemux86-tcbootstrap --print-file-name=crtend.o` csu/ crtn.o
我在目录中有一个 libc.a 和一个 libc_nonshared.a 文件。在非共享版本中没有提到__libc_csu_init 或__libc_csu_fini,但它们在普通的libc.a 中。这似乎与人们认为应该是真的相反,尽管......当我查看 /usr/lib/i386-linux-gnu 以了解 Ubuntu 附带的内容时,共享和非共享版本都提到了它。嗯。
如果有人读到这篇文章并说“嘿,我打赌我知道发生了什么事!”那会很漂亮。 :-)
【问题讨论】:
标签: gcc linker-errors glibc webos openembedded