一个类似的(较少描述性的)员额 在这里,.

我想滚是我自己的工具链的使用最近发布Ubuntu,并希望有足够的Linux社区,在这里,我可以得到具体的建议在某些问题,因为他们来了。

与每个人的帮助我想看到这个变成一个有用的参考最终。

首先"Crosstool"这几乎每个人都是指一点(2006年)的日期和"Crosstool-NG"这似乎现在可以携带的火炬失败在我的机器。我宁愿调试进程本身于一个脚本(其它似乎需要我了解的过程)。

下面是基本步骤什么我有工作为止;现在我被卡住了试图汇编的第一次通过海湾合作委员会.

其它的失败...

这是失败的,因为跨编库含有"crti.o"丢失:

# ./gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c 
/bin/bash ../../../gcc-4.4.1/libgcc/../mkinstalldirs .
/usr/src/gnu-4.4.1-build/./gcc/xgcc -B ........
/usr/local/arm-linux/bin/ld: crti.o No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libgcc_s.so] Error 1
make[2]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build/arm-linux/libgcc'
make[1]: *** [all-target-libgcc] Error 2
make[1]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build'
make: *** [all] Error 2

建立的步骤

在一个'新'构成Ubuntu9.04安装,这步我已经做了迄今为止:

#New configuration of Ubuntu 9.04
sudo updatedb
sudo apt-get install build-essential subversion
# For kernel configuration
sudo apt-get install libncurses5-dev
# For building GCC
sudo apt-get install libgmp3-dev libmpfr-dev

#Get Linux Headers for GCC/GLIBC compilations
# I use a hacked Linux from Artilla, 
pushd ~ && svn co http://.../linux m501-linux && cd !$
make ARCH=arm m501_defconfig
make ARCH=arm menuconfig
sudo mkdir /usr/local/arm-linux/include
sudo cp -dR include/asm-arm /usr/local/arm-linux/include/asm
sudo cp -dR include/linux /usr/local/arm-linux/include/linux
cd /usr/local/arm-linux/
sudo ln -s include sys-include
popd

#Get sources:
cd /usr/src/
sudo su root
mkdir gnu
ftp ftp.gnu.org
# get gnu/binutils/binutils-2.19.1.tar.bz2
# get gnu/gcc/gcc-4.4.1/gcc-4.4.1.tar.bz2
# get gnu/glibc/glibc-2.10.1.tar.bz2
# get gnu/gdb/gdb-6.8.tar.bz2

#Build Binutils
bzcat binutils-2.19.1.tar.bz2 | tar -xv
mkdir binutils-2.19.1-build && cd !$
cp ../binutils-2.19.1/gas/config/tc-arm.c ./tc-arm.c 
sed -r 's/(as_bad[ \t]*\()(.+\[.+\]\))/\1\"%s\",\2/' < ./tc-arm.c > ../binutils-2.19.1/gas/config/tc-arm.c 
rm ./tc-arm.c    
../binutils-2.19.1/configure --target=arm-linux
make && make install && cd ..

#Build GCC
bzcat gcc-4.4.1.tar.bz2 | tar -xv
mkdir gcc-4.4.1-build && cd !$
../gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c -with-headers=/usr/local/arm-linux/include
make
有帮助吗?

解决方案 7

这是有点红鲱鱼。显然,跨compling与工作GLIBC现有的系统不需要GLIBC的工具链重新编译。老实说,我不知道我怎么忽略了这一事实。

所以,即使我仍然不知道如何交叉编译GCC的的GLIBC,因为我只需要GCC我要去纪念这是封闭的。

如果我可以,我会回来的这篇文章,标志着我最终没有。

编辑:

其他提示

欢迎的,你并不孤单。

<强>故事

我不知道为什么ARM交叉编译就是这样一个噩梦。这不是我的观点,让我们来看看,别人说什么......

  

构建一个gcc / glibc的交叉工具链   在嵌入式系统中使用   发展曾经是一个可怕的   前景,需要钢铁般的意志,如果天   不是几周的努力,大量的Unix和   GNU绝杀,有时愿意   采取狡猾的捷径。 http://www.kegel.com/crosstool/

我的ARM计算机(GuruPlug)的Debian的运行,因此我只需要一个标准的G ++编译器,而没有任何调整。

我用我的笔记本上32位的Ubuntu。有deb包的AVR交叉编译器,甚至为Z80,但没有对ARM - 为什么? OK,我们必须编译之一。我们走吧。工具链的编译过程是一个有点混乱给我。 14K线长的Makefile,谢谢。

在某些天(夜),我失败了。

<强>将溶液

最后,我发现了即用的盒的soluion。我刚刚下载了这东西的精简版版: http://www.codesourcery.com/ sgpp / lite_edition.html ,现在我很高兴。它拥有一个丑陋的安装程序,但它的作品。它说: 臂-NONE-Linux的gnueabi-G ++(的Sourcery G ++精简版2010q1-202)4.4.1 ,这是一个上最新G ++版本。

(我的朋友有一台Mac,而他也无法与它战斗了一个星期后,编译工具链。他现在是用在虚拟机上运行Ubuntu这个编译器。)

您真的应该投入更多的努力与使用的crosstool-NG,因为crosstool的邮件列表是非常活泼。由于理解整个过程是一个艰巨的任务,了解如何使用一个工具,你可能会重用是恕我直言,更有趣。

下面是 HELENOS ARM-32工具链的安装脚本,这应该做你想要什么用很少的摆弄。我使用它在Ubuntu现在(我的HELENOS开发者之一)。它是由马丁Decky:

#!/bin/bash

# Cross-Compiler Toolchain for ${PLATFORM}
#  by Martin Decky <martin@decky.cz>
#
#  GPL'ed, copyleft
#


check_error() {
    if [ "$1" -ne "0" ]; then
        echo
        echo "Script failed: $2"
        exit
    fi
}

if [ -z "${CROSS_PREFIX}" ] ; then
    CROSS_PREFIX="/usr/local"
fi

BINUTILS_VERSION="2.19.1"
GCC_VERSION="4.3.3"

BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz"
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2"
GCC_OBJC="gcc-objc-${GCC_VERSION}.tar.bz2"
GCC_CPP="gcc-g++-${GCC_VERSION}.tar.bz2"

BINUTILS_SOURCE="ftp://ftp.gnu.org/gnu/binutils/"
GCC_SOURCE="ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/"

PLATFORM="arm"
WORKDIR=`pwd`
TARGET="${PLATFORM}-linux-gnu"
PREFIX="${CROSS_PREFIX}/${PLATFORM}"
BINUTILSDIR="${WORKDIR}/binutils-${BINUTILS_VERSION}"
GCCDIR="${WORKDIR}/gcc-${GCC_VERSION}"
OBJDIR="${WORKDIR}/gcc-obj"

echo ">>> Downloading tarballs"

if [ ! -f "${BINUTILS}" ]; then
    wget -c "${BINUTILS_SOURCE}${BINUTILS}"
    check_error $? "Error downloading binutils."
fi
if [ ! -f "${GCC_CORE}" ]; then
    wget -c "${GCC_SOURCE}${GCC_CORE}"
    check_error $? "Error downloading GCC Core."
fi
if [ ! -f "${GCC_OBJC}" ]; then
    wget -c "${GCC_SOURCE}${GCC_OBJC}"
    check_error $? "Error downloading GCC Objective C."
fi
if [ ! -f "${GCC_CPP}" ]; then
    wget -c "${GCC_SOURCE}${GCC_CPP}"
    check_error $? "Error downloading GCC C++."
fi

echo ">>> Creating destionation directory"
if [ ! -d "${PREFIX}" ]; then
    mkdir -p "${PREFIX}"
    test -d "${PREFIX}"
    check_error $? "Unable to create ${PREFIX}."
fi

echo ">>> Creating GCC work directory"
if [ ! -d "${OBJDIR}" ]; then
    mkdir -p "${OBJDIR}"
    test -d "${OBJDIR}"
    check_error $? "Unable to create ${OBJDIR}."
fi

echo ">>> Unpacking tarballs"
tar -xvzf "${BINUTILS}"
check_error $? "Error unpacking binutils."
tar -xvjf "${GCC_CORE}"
check_error $? "Error unpacking GCC Core."
tar -xvjf "${GCC_OBJC}"
check_error $? "Error unpacking GCC Objective C."
tar -xvjf "${GCC_CPP}"
check_error $? "Error unpacking GCC C++."

echo ">>> Compiling and installing binutils"
cd "${BINUTILSDIR}"
check_error $? "Change directory failed."
./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" "--disable-nls"
check_error $? "Error configuring binutils."
make all install
check_error $? "Error compiling/installing binutils."

echo ">>> Compiling and installing GCC"
cd "${OBJDIR}"
check_error $? "Change directory failed."
"${GCCDIR}/configure" "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared
check_error $? "Error configuring GCC."
PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
check_error $? "Error compiling/installing GCC."

echo
echo ">>> Cross-compiler for ${TARGET} installed."

对不起任何换行,应该很容易修复。如果你想有一个引擎收录或HTTP链接得到它,只是发表评论。

如果你真的想建立完整工具链自己:点击 http://frank.harvard.edu/~coldwell/toolchain/ 结果 HTTP://ftp.snapgear。组织/酒吧/的SnapGear /工具/ ARM-Linux的/建造-ARM-Linux的3.4.4 结果 就拿记住,虽然,你应该寻找工具链了兼容性矩阵,或者您可能会遇到奇怪的编译错误。结果 点击 如果您仍然有crosstool的-NG的选项,这就是我正在上最后几天:点击 http://blog.stranadurakov.com/2009/08 / 04 /如何对ARM-Linux的/ 结果 在这里,你会发现我的crosstool-ng的配置文件,它已经为我工作。

我最近建立了一个GNU工具链臂使用crosstool-ng。它采取了一些试验和错误,以找出哪个版本的工具组成部分将发挥好一起的,但最终我得到了它的工作与下列版本:

  • binutils2.19.1
  • 海湾合作委员会4.3.2
  • gmp4.2.2
  • linux内核2.6.29.1
  • 这三个库2.3.1
  • uClibc0.9.30.1

看到如果这些为你工作太多。

此外, 本项目 作为它的一部分的建立过程中创建一个交叉编制工具.你可能想试试,选择其一臂基局作为目标,甚至如果你不感兴趣制作的无线路由器。

我一直使用 buildroot的来建立交叉编译工具链的Linux和图书馆有好运气。 Buildroot里面使用轻型uClibc的C库,而不是glibc的,所以它可能不符合您的需求。 (和获取工具链这种方式可能不会非常令人兴奋,自己编译它。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top