2015-10-31 5 views
4

Я пытаюсь настроить кросс-компилятор для i686-elf на Ubuntu, следующий за OSDev GCC Cross-Compiler Tutuorial. Однако код для настройки GCC не может быть создан каждый раз. Я знаю, что мои источники не устарели, потому что я ничего не делал.Building GCC make: *** [all] Ошибка 2

Для того, чтобы получить пакеты мне нужно, я сделал:

sudo apt-get install g++ 
sudo apt-get install make 
sudo apt-get install bison 
sudo apt-get install flex 
sudo apt-get install libgmp3-dev 
sudo apt-get install libmpfr-dev libmpfr-doc libmpfr4 libmpfr4-dbg 
sudo apt-get install mpc 
sudo apt-get install texinfo 
sudo apt-get install libcloog-isl-dev 

Я думаю, что нет никаких проблем с этим методом?

Затем с GCC-5.2.0 и Binutils-2.25.1 (в убунту, bintuils, кажется, не работает ни с чем выше той старой версии) я установил Binutils просто отлично. Я пошел строить GCC, но когда я напечатал в замыкающих, я получил следующее сообщение об ошибке:

К сожалению, я не могу копировать + вставить 30 страниц, но это весь код, ближе к концу:

checking command to parse nm output from gcc -m32 object... failed 
checking how to run the C preprocessor... /lib/cpp 
checking for ANSI C header files... no 
checking for sys/types.h... no 
checking for sys/stat.h... no 
checking for stdlib.h... no 
checking for string.h... no 
checking for memory.h... no 
checking for strings.h... no 
checking for inttypes.h... no 
checking for stdint.h... no 
checking for unistd.h... no 
checking for dlfcn.h... no 
checking for objdir... .libs 
checking if gcc -m32 supports -fno-rtti -fno-exceptions... no 
checking for gcc -m32 option to produce PIC... -fPIC -DPIC 
checking if gcc -m32 PIC flag -fPIC -DPIC works... yes 
checking if gcc -m32 static flag -static works... no 
checking if gcc -m32 supports -c -o file.o... yes 
checking if gcc -m32 supports -c -o file.o... (cached) yes 
checking whether the gcc -m32 linker (ld -m elf_x86_64 -m elf_i386) supports shared libraries... yes 
checking whether -lc should be explicitly linked in... no 
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES. 
Makefile:9590: recipe for target 'configure-zlib' failed 
make[1]: *** [configure-zlib] Error 1 
make[1]: Leaving directory '/home/david/scr' 
Makefile:876: recipe for target 'all' failed 
make: *** [all] Error 2 

и это часть (сразу же после этого), где-то действительно плохое случается:

checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES. 
Makefile:9590: recipe for target 'configure-zlib' failed 
make[1]: *** [configure-zlib] Error 1 
make[1]: Leaving directory '/home/david/scr' 
Makefile:876: recipe for target 'all' failed 
make: *** [all] Error 2 

Может кто-нибудь сказать мне, что я делаю неправильно и как я бы это исправить?

Спасибо!

+4

[Это сообщение] (https://gcc.gnu.org/ml/gcc-help/2012-07/msg00018.html) может быть вам полезна. – fuz

+0

@FUZxxl спасибо! Я расскажу позже, если это сработает. –

+1

@FUZxxl OMG THANKS Я ** буквально ** потратил более 50 часов на это, и он, наконец, работал. –

ответ

1

Проблема была в том, что я не устанавливал mpc из источника.

Вот готовый файл (setup-gcc.sh):

#################################### 
echo Stage 1 - Building Dependencies 
#################################### 

# make a working directory 
cd $HOME/Documents 
rm -rf Cross 
mkdir Cross 
cd Cross 

# install or update all apt-get dependencies 
sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install gcc     # not cross 
sudo apt-get install g++ 
sudo apt-get install make 
sudo apt-get install bison 
sudo apt-get install flex 
sudo apt-get install gawk 
sudo apt-get install libgmp3-dev 
sudo apt-get install libmpfr-dev libmpfr-doc libmpfr4 libmpfr4-dbg 
sudo apt-get install mpc 
sudo apt-get install texinfo    # optional 
sudo apt-get install libcloog-isl-dev  # optional 
sudo apt-get install build-essential 
sudo apt-get install glibc-devel 
sudo apt-get -y install gcc-multilib libc6-i386 

# download and unpack necessary files 
wget http://ftpmirror.gnu.org/binutils/binutils-2.25.1.tar.gz 
wget http://ftpmirror.gnu.org/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz 
wget http://ftpmirror.gnu.org/mpc/mpc-1.0.3.tar.gz 
for f in *.tar*; do tar zvxf $f; done 

# create installation directory 
mkdir Install 
export PREFIX="$HOME/Documents/Cross/Install" 
export TARGET=i686-elf 
export PATH="$PREFIX/bin:$PATH" 

################################ 
echo Stage 2 - Building Compiler 
################################ 

# install mpc 
mkdir build-mpc 
cd build-mpc 
../mpc-1.0.3/configure --prefix="$PREFIX" 
make -j2 
make -j2 check 
make -j2 install 
cd .. 

# install binutils 
mkdir build-binutils 
cd build-binutils 
../binutils-2.25.1/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror 
make -j2 
make -j2 install 
cd .. 

# install gcc 
mkdir build-gcc 
cd build-gcc 
../gcc-5.3.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers --with-mpc="$PREFIX" 
make -j2 all-gcc 
make -j2 all-target-libgcc 
make -j2 install-gcc 
make -j2 install-target-libgcc 

После того, как вы установили его, вы можете запустить его с:

export PREFIX="$HOME/Documents/Cross/Install" 
export TARGET=i686-elf 
$PREFIX/bin/$TARGET-gcc --version 

К сожалению, делать это внутри псевдонима или Баш скрипт похоже, не запускает его должным образом, поэтому, если это не будет исправлено, вам придется просто сохранить сценарий в текстовом файле и скопировать его в терминал каждый раз при перезагрузке.

Чтобы удалить свой кросс-компилятор, просто удалите $HOME/Documents/Cross directory.

В качестве последнего замечания, изменения каталога установки или цель так легко, как меняется значение $PREFIX или $TARGET, но я бы не рекомендовал его, потому что вы можете столкнуться с другими неожиданными проблемами.

0

В дополнение к --with-system-zlib, он работал для меня, когда я использую опцию --disable-multilib.

Смежные вопросы