Создание ARM Кросс-компилятор GNU

Различие является очень определенным для платформы.

часы () очень отличаются в Windows, чем на Linux, например.

Для вида примеров Вы описываете, Вы, вероятно, хотите "timeit" модуль вместо этого.

10
задан Community 23 May 2017 в 11:45
поделиться

7 ответов

Это было отвлекающим маневром. Очевидно, кросс-компиляция цепочки инструментов для существующей системы с работающим GLIBC не требует перекомпиляции GLIBC. Честно говоря, я не знаю, как я проигнорировал этот факт.

Так что, хотя я до сих пор не знаю, как скомпилировать GCC и GLIBC, мне нужен только GCC, я собираюсь отметить это как закрыто.

Если смогу, я вернусь к этому сообщению и отмечу, что я в итоге сделал.

РЕДАКТИРОВАТЬ:

Оформить заказ это .

-1
ответ дан 3 December 2019 в 23:14
поделиться

Вот сценарий установки HelenOS arm-32 toolchain, он должен делать то, что вы хотите, с очень немного возиться. Сейчас я использую его в Ubuntu (я один из разработчиков HelenOS). Это было написано Мартином Деки:

#!/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."

Извините за перенос строк, это должно быть легко исправить. Если вы хотите получить его по ссылке pastebin или http, просто оставьте комментарий.

2
ответ дан 3 December 2019 в 23:14
поделиться

Если вы действительно хотите создать для себя всю цепочку инструментов:
http://frank.harvard.edu/~coldwell/toolchain/
http: // ftp. snapgear.org/pub/snapgear/tools/arm-linux/build-arm-linux-3.4.4
Однако имейте в виду, что вы должны искать матрицу совместимости инструментальной цепочки, иначе вы можете столкнуться со странными ошибками компиляции. 1232] Если у вас еще есть возможность использовать crossstool-ng, то вот над чем я работал последние несколько дней:
http://blog.stranadurakov.com/2009/08/04/how-to- arm-linux /
Здесь вы найдете мой файл конфигурации crossstool-ng, который у меня сработал.

1
ответ дан 3 December 2019 в 23:14
поделиться

Недавно я построил набор инструментов GNU для ARM с помощью crossstool-ng. Потребовалось немного проб и ошибок, чтобы выяснить, какие версии компонентов инструментальной цепочки будут хорошо работать вместе, но я наконец добился того, что он работает со следующими версиями:

  • binutils 2.19.1
  • gcc 4.3.2
  • gmp 4.2.2
  • ядро ​​Linux 2.6.29.1
  • mpfr 2.3.1
  • uClibc 0.9.30.1

Посмотрите, подойдут ли они и вам.

Также OpenWrt as часть процесса сборки создает набор инструментов для кросс-компиляции. Вы можете попробовать это, выбрав одну из плат на базе ARM в качестве цели, даже если вы не заинтересованы в создании беспроводного маршрутизатора.

1
ответ дан 3 December 2019 в 23:14
поделиться

Мне повезло с использованием buildroot для создания наборов инструментов и библиотек для кросс-компиляции Linux. Buildroot использует облегченную библиотеку uclibc C, а не glibc, поэтому она может не работать для ваших целей. (И получить цепочку инструментов таким образом может быть не так интересно, как и компилировать ее самостоятельно.)

1
ответ дан 3 December 2019 в 23:14
поделиться

Добро пожаловать , вы не одиноки.

История

Я не знаю, почему кросс-компиляция ARM стала таким кошмаром. Это не мое мнение, давайте посмотрим, что говорят другие ...

Создание кросс-инструментальной цепочки gcc / glibc для использования во встраиваемых системах развитие было страшным перспектива, требующая железной воли, дней, если не недели усилий, много Unix и Знания Гну, а иногда и желание выбирайте изворотливые ярлыки. ( http://www.kegel.com/crosstool/ )

Мой компьютер ARM (GuruPlug) работает на Debian, поэтому мне просто нужен стандартный компилятор G ++ без каких-либо настроек.

Я использую на своем ноутбуке 32-битную Ubuntu. Есть пакеты deb для кросс-компилятора AVR или даже для Z80, но нет для ARM - почему? Хорошо, мы должны его скомпилировать. Пойдем. Меня немного сбивает с толку процесс компиляции инструментальной цепочки. Makefile длиной 14 тыс. Строк, спасибо.

Через несколько дней (и ночей) я потерпел неудачу.

Решение

Наконец, я нашел готовое решение. Я только что загрузил облегченную версию этого материала: http://www.codesourcery.com/sgpp/lite_edition.html и теперь я счастлив. У него ужасный установщик, но он работает. Он говорит: arm-none-linux-gnueabi-g ++ (Sourcery G ++ Lite 2010q1-202) 4.4.1 , последняя версия G ++.

(У моего друга Mac, и он также не смог скомпилировать цепочку инструментов после недельной борьбы с ним. Сейчас он использует этот компилятор на виртуальной машине под управлением Ubuntu.)

7
ответ дан 3 December 2019 в 23:14
поделиться

Вам действительно следовало бы приложить больше усилий к использованию crosstool-NG, поскольку список рассылки crosstool очень реактивен. Поскольку понимание всего процесса - это огромная задача, понимание того, как использовать инструмент, который вы можете использовать повторно, IMHO более интересно.

3
ответ дан 3 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: