crosstool-NG linux x86 32 位构建在 32 位 vm 机器、汇编程序消息上失败



我们想使用 crosstool-NG ct-ng 编译一个定义的 Linux x86 32Bit 工具链:

格利布 2.9
海湾合作委员会 4.8.4

我使用的是 ubuntu 14.04 32 位:
Linux ubuntu 3.16.0-30-generic #40~14.04.1-Ubuntu SMP 星期四 1月 15 17:45:15 UTC 2015 i686 i686 i686 GNU/Linux.

交叉工具NG失败,并显示:
Build failed in step 'Installing C library headers & start files'

编译时

/home/user/crosstool-x86-linux-32/.build/i386-unknown-linux-gnu/build/build-libc-startfiles/csu/crtn.o

它失败了,有几个

汇编程序消息:

[ALL ] /tmp/ccCj5ny0.s: Assembler messages: [ALL ] /tmp/ccCj5ny0.s:92: Error: can't resolve .LFE8' {*UND* section} - .LFB8' {UND 部分}(以及类似的错误...
在那个特定问题之前,我们遇到了类似的问题

../sysdeps/generic/initfini.c: Assembler messages: ../sysdeps/generic/initfini.c:123: Error: open CFI at the end of file; missing .cfi_endproc directive ../sysdeps/generic/initfini.c:123: Error: open CFI at the end of file; missing .cfi_endproc directive

我们暂时"修复"了在这篇文章中找到的目标/主机/构建标志中使用"-FNO-dwarf2-CFI-asm"的错误 http://www.openwall.com/lists/owl-dev/2011/10/18/4。

这把我们带到了这里...

我很想知道这个错误的来源是什么,除了 glibc 是旧的(可能是......

请参阅.config和build.log的附件 ct-ng。http://s000.tinyupload.com/download.php?file_id=60582934753963239188&t=6058293475396323918817262

我已经做了一段时间了,我通过修补 ./.build/src/glibc-2.9/sysdeps/i386/Makefile 解决了这个特殊问题:

ifeq ($(subdir),csu)
CFLAGS-initfini.s += -fno-unwind-tables -fno-asynchronous-unwind-tables
endif
ifeq ($(subdir),nptl)
CFLAGS-pt-initfini.s += -fno-unwind-tables -fno-asynchronous-unwind-tables
endif

修复后,我遇到了问题

[ALL  ]    make[3]: *** No rule to make target `.build/i386-unknown-linux-gnu/build/build-libc-final/nptl/pthread_spin_trylock.o', needed by `lib-noranlib'.  Stop.

根据这篇文章:https://sourceware.org/ml/crossgcc/2012-06/msg00023.html通过将 CT_ARCH_CPU 和 CT_ARCH_TUNE 设置为 i686 来解决。

我的交叉工具-NG 版本 (crosstool-ng-1.21.0-41-gc45cfb5) 显示

Target-options->Tune for CPU

只有当

Target-options->Emit assembly for CPU

为空。我假设使用 mcpuCPU 发出程序集可能会给我相同的结果。

为了避免此问题集(如上面的链接所示)

Target-options->Emit assembly for CPU

到 i686。

相关内容

  • 没有找到相关文章

最新更新