在 x86_64 linux 机器上编译 gentoo-bionic

Posted

技术标签:

【中文标题】在 x86_64 linux 机器上编译 gentoo-bionic【英文标题】:Compiling gentoo-bionic on a x86_64 linux machine 【发布时间】:2016-03-31 10:40:37 【问题描述】:

您可能知道,Bionic 是 Google 用来运行 android 应用程序的 C 库。有人努力在 Linux 机器上编译它,所以它可以很容易地在 Android 之外使用。这是最新努力的代码,最初称为 Gentoo-bionic。最初的项目是基于 Gentoo 的,但当前的源不是 Gentoo 特定的。我正在使用 Ubuntu。代码如下:

https://github.com/gentoobionic/bionic

这是关于它在 ELC2013 上的介绍:

http://elinux.org/images/2/25/2013_elc_gentoo_bionic.pdf http://free-electrons.com/blog/elc-2013-videos/(声音不好)

我尝试在 X86_64 Ubuntu 上编译它,但失败了。我试过了:

./autogen.sh
./configure

我明白了:

configure: error: unsupported host cpu x86_64

所以我尝试了:

./configure --build=arm-linux --target=arm-linux --host=arm-linux

它配置得很好,但我得到了:

$ make
make: *** No rule to make target `libc/arch-x86/include/machine/cpu-features.h',
    needed by `all-am'.  Stop.

有人可以提出解决方法吗?

【问题讨论】:

【参考方案1】:

我对仿生学一无所知。我只是想帮你。 当我查看配置文件时,我看到了这段代码。

Makefile.h.am:第 135 行

if TARGET_ARCH_IS_X86
includemachine_HEADERS += \
    $(addprefix $(top_srcdir)/libc/arch-x86/include/, \
        machine/fpu_control.h \
        machine/sigcontext.h \
        machine/wordsize.h \
    )
endif

if TARGET_ARCH_IS_ARM
includemachine_HEADERS += \
    $(addprefix $(top_srcdir)/libc/arch-x86/include/, \
        machine/cpu-features.h \
    )
endif

configure.ac:第 94 行

case $host_cpu in
  *i?86*)
    TARGET_ARCH=x86
    COMMON_LDFLAGS="$COMMON_LDFLAGS $COMMON_LDFLAGS_X86"
    COMMON_CFLAGS="$COMMON_CFLAGS $COMMON_CFLAGS_X86"
    COMMON_INCLUDES="$COMMON_INCLUDES $COMMON_INCLUDES_X86"
    COMMON_LDLIBS="$COMMON_LDLIBS $COMMON_LDLIBS_X86"
  ;;
  *arm*)
    TARGET_ARCH=arm
    COMMON_LDFLAGS="$COMMON_LDFLAGS $COMMON_LDFLAGS_ARM"
    COMMON_CFLAGS="$COMMON_CFLAGS $COMMON_CFLAGS_ARM"
    COMMON_INCLUDES="$COMMON_INCLUDES $COMMON_INCLUDES_ARM"
    COMMON_LDLIBS="$COMMON_LDLIBS $COMMON_LDLIBS_ARM"
  ;;
  *)
  AC_MSG_ERROR([unsupported host cpu $host_cpu])
  ;;
esac

include/machine 文件夹中没有 cpu-features.h 文件。所以,你必须使用不同的目标。

【讨论】:

【参考方案2】:

自 2015 年 11 月以来,我的 set of ebuid scripts 在我的 Gentoo x86_64 桌面上为 x86_64 和 i386 编译仿生。所需工具:glibc-targeting GCC 版本 4.9.3 或 5.3.0; binutils 2.4.25 或更早版本,glibc-targeting clang 3.5.0,make。

如果您可以在桌面上安装这些工具,您就可以编译仿生。

但请注意,我的 ebuild 应用了无数个补丁。

要查看他们的工作,您可以执行以下操作:

    在 x86_64 台式机或笔记本电脑上启动 Live Gentoo DVD。 安装我的脚本。

    运行它们以捕获输出,例如

    USE=verbose ebuild bionic/bionic-5.1.1-r29.ebuild clean install qmerge 2>&1 | tee /tmp/bionic.cout

一旦此类命令终止,您将获得修补后的源代码树、中间和最终编译结果,以及使用 gcc/clang/ld/ar 命令行的完整构建日志。

【讨论】:

我正在这样做,我希望我可以在其他地方轻松编译修补的源代码树。这里有人说:“ebuild 是一个简单的文本文件(只不过是一个 bash 脚本)。你只需要源文件并手动编译源(Portage,Gentoo 包管理器,使用 ebuild 文件来自动编译源文件)。” ubuntuforums.org/showthread.php?t=255187对吗?

以上是关于在 x86_64 linux 机器上编译 gentoo-bionic的主要内容,如果未能解决你的问题,请参考以下文章

转Ubuntu 上编译Android出现cannot find -lstdc++解决办法

xcode上编译c语言程序报错:ld: x duplicate symbol for architecture x86_64 clang: error: linker command failed

xcode上编译c语言程序报错:ld: x duplicate symbol for architecture x86_64 clang: error: linker command failed

为什么此C ++程序在MacOS上而不在Ubuntu上编译?

66AK2G12 ,K2GEVM开发板上编译Uboot的步骤

66AK2G12 ,K2GEVM开发板上编译Uboot的步骤