我正在尝试构建 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 抱怨:在函数“_start”中,未定义对“__libc_csu_fini”和“__libc_csu_init”的引用
使用 ld 直接链接 C 程序失败,未定义对 `__libc_csu_fini` 的引用
但这是在自定义嵌入式 LIBC 的构建过程中: eglibc。所以有点不同,我能找到的最接近的案例是OpenEmbedded list 上的这个 2009 线程。我不确定如何在 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=both 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-as-needed -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 附带的内容时,共享和非共享版本都提到了它。嗯。
如果有人读到这篇文章并说“嘿,我打赌我知道发生了什么事!” 那会很漂亮。:-)