【问题标题】:Porting Newlib with current autotools使用当前的自动工具移植 Newlib
【发布时间】:2014-06-01 03:10:25
【问题描述】:

我正在尝试为我的爱好内核构建一个工具链,但在构建 Newlib 时遇到了问题。每当我尝试在 newlib/libc/sys/ 下的内核目录中运行 autoreconf 时,都会出现错误:

configure.in:5: error: support for Cygnus-style trees has been removed

这里是 configure.in 的内容(基本上,取自以下教程):

AC_PREREQ(2.59)
AC_INIT([newlib], [NEWLIB_VERSION])
AC_CONFIG_SRCDIR([crt0.S])
AC_CONFIG_AUX_DIR(../../../..)
NEWLIB_CONFIGURE(../../..)
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

以及 Makefile.am 的来源(同样主要来自教程):

AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
AM_CCASFLAGS = $(INCLUDES)

noinst_LIBRARIES = lib.a

if MAY_SUPPLY_SYSCALLS
    extra_objs = $(lpfx)syscalls.o
else
    extra_objs =
endif

lib_a_SOURCES =
lib_a_LIBADD = $(extra_objs)
EXTRA_lib_a_SOURCES = syscalls.c crt0.S
lib_a_DEPENDENCIES = $(extra_objs)
lib_a_CCASFLAGS = $(AM_CCASFLAGS)
lib_a_CFLAGS = $(AM_CFLAGS)

if MAY_SUPPLY_SYSCALLS
    all: crt0.o
endif

ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host

是的,我已尝试删除 AUTOMAKE_OPTIONS=cygnus

我已经用谷歌搜索并试图理解这一点,据我所知,这是因为我使用的 autotools 版本。根据我最初使用的教程(OSDev - OS Specific Toolchain),我需要一个旧版本。我的问题是我正在使用 Kubuntu,它使用 apt 包管理器,并且该版本甚至暂时无法回退。必须对此进行一些修复。要么 Newlib 已经过时(这个版本是从 2013 年 12 月开始...),要么开发人员对依赖过时的 autotools 版本感到疯狂。

我唯一能想到的另一件事是,这是来自 newlib 配置方案本身的消息,在这种情况下,我不知道如何修改我的 configure.in 和 Makefile.am 以与新的 newlib 配置格式保持一致。该教程是迄今为止我发现的唯一一个没有使用 libgloss(我不想这样做)的教程,并且 newlib 的文档中缺少添加新目标的文档(或者我错过了一些东西) .

这里是一些版本信息:

  • 系统:Kubuntu 14.04
  • 自动制作:1.14.1
  • 自动配置:2.69
  • 新库:2.1.0

【问题讨论】:

    标签: operating-system kernel autotools


    【解决方案1】:

    很遗憾,使用 automake 1.12 或更早版本恐怕是您唯一的选择。如果我没记错的话,Ubuntu 有一个 Automake1.11 单独的软件包可以帮助你,因为 1.12 和 1.14 之间的兼容性通常很好,但在此之前它是参差不齐的。

    【讨论】:

    • 哦,好吧。我只检查了apt-cache showpkg automake 并查看了版本。我没有意识到它是在一个完全独立的包装下。我卸载了automake,然后安装了automake1.11,它现在可以工作了!非常感谢!
    【解决方案2】:

    我正在为那些在here 描述的教程中苦苦挣扎的人写这个答案。

    我现在(或曾经)处于同样的情况,我正在从头开始构建内核,我想将 newlib 移植到我的工具链中。不幸的是,我认为本教程已经过时了,因为我完全按照说明进行操作,甚至安装了正确版本的正确软件(包括正确的 newlib 版本)。上面接受的解决方案对我不起作用,但我找到了另一个可能对其他人有用的解决方案:

    第 1 步 - 获取正确的软件

    第 2 步 - 构建过程

    解压两个档案:

    tar xf automake-1.12.tar.gz
    tar xf autoconf-2.65.tar.gz
    

    创建目标文件夹:

    mkdir ~/bin
    

    创建一个构建文件夹:

    mkdir build
    cd build
    

    先配置automake:

    ../automake-1.12/configure --prefix="~/bin"
    

    制作和安装

    make && make install
    

    现在让我们配置自动配置

    ../autoconf-2.65/configure --prefix=~/bin
    

    然后制作并安装:

    make && make install
    

    您现在应该在~/bin 中拥有正确的二进制文件!

    第 3 步 - 更新 PATH

    临时将这些二进制文件添加到您的路径(推荐):

    export PATH=~/bin:$PATH
    

    更新路径后,重新运行 autoconfautoreconf,它应该会完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-14
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多