我正在尝试为我的业余爱好内核构建一个工具链,但是在构建Newlib时我遇到了问题。每当我尝试在newlib / libc / sys /下的kernels目录中运行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
。
我已经用Google搜索并试图理解这一点,据我所知,这是因为我正在使用的autotools版本。根据我最初使用的教程(OSDev - OS Specific Toolchain),我需要一个旧版本。我的问题是我正在使用Kubuntu,它使用apt软件包管理器,而且该版本暂时无法恢复。必须有一些解决方案。要么Newlib已经过时了(这个版本是从2013年12月开始......),或者开发人员因为过时的autotools版本而疯狂。
我能想到的另一件事是,这是来自newlib配置方案本身的消息,在这种情况下,我不知道如何修改我的configure.in和Makefile.am以与新的newlib配置格式保持一致。那个教程是我发现的唯一一个没有使用libgloss(我不想做的)到目前为止,并且在newlib的文档中缺少添加新目标的文档(或者我错过了一些东西)
以下是一些版本信息:
答案 0 :(得分:5)
不幸的是,我担心使用automake 1.12或更早版本是你唯一的选择。如果我没有弄错的话,Ubuntu有一个Automake1.11
单独的软件包可以帮助你,因为1.12和1.14之间的兼容性通常很好,但在此之前它很不稳定。
答案 1 :(得分:1)
我正在为那些正在努力学习here教程的人写这个答案。
我和你(或者是)的情况相同,我正在从头构建一个内核,我想将newlib移植到我的工具链中。不幸的是我觉得这个教程已经过时了,因为我完全按照说明操作,甚至安装了正确版本的软件(包括正确的newlib版本)。上面接受的解决方案对我没有用,但我找到了另一种可能对其他人有用的解决方案:
解压两个档案:
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
../autoconf-2.65/configure --prefix=~/bin
然后制作并安装:
make && make install
您现在应该在~/bin
中拥有正确的二进制文件!
暂时将这些二进制文件添加到您的路径中(推荐):
export PATH=~/bin:$PATH
更新路径后,请重新运行autoconf
和autoreconf
,然后就可以完成。