ROS builds MINGW-w64
Содержание
[убрать]Сборка MINGW-w64
... для чайников. Эта статья в первую очередь предназначена для пользователей, не имеющих ни малейшего представления о том, как скомпилировать gcc, но, тем не менее, желающих это сделать. Это лишь небольшая шпаргалка, просто выполняйте все действия по порядку и вы получите, что хотели. Если вам нужно что-то особенное, то нагуглите это самостоятельно ;-)
Установка среды сборки
Скачайте и установите MSYS. Вам потребуются следующие пакеты:
MSYS-w64 (версия 20111123) make (версия 3.82.90) Свежий тулчейн mingw-w64 32 bit (here) Вам потребуется файл с именем вроде: mingw-w32-1.0-bin_i686-mingw_%NEWESTDATE%.zip Скачайте все пакеты и извлеките их содержимое в c:\MSYS (или типа того).
Необходимо выполнить несколько дополнительных действий:
Перейдите в папку bin внутри папки msys, скопируйте и переименуйте i686-w64-*.exe в *.exe чтобы исключить возникновение проблем во время работы configure Удалите dlfcn.h везде, где только сможете найти. НЕ ЗАБЫВАЙТЕ про скрипт postinstall
Получение исходного кода
Загрузите все файлы исходного кода в подпапки /src
binutils (версия 2.22.53 или более новая) -> /src/binutils gcc-core (версия 4.6.3 или более новая) -> /src/gcc gcc-g++ (версия 4.6.3 или более новая) -> /src/gcc mingw-w64 v2.0.3 (отсюда) -> /src/mingw-w64 MPFR (версия 3.1.0) -> /src/mpfr GMP (версия 5.0.5) -> /src/gmp MPC (версия 0.9) -> /src/mpc
Примечание
Скопируйте директорию src/mingw-w64/mingw-w64-headers/include в /RosBE64/mingw и в /RosBE64/x86_64-w64-mingw32 (для 64 бит) или /RosBE64/i686-w64-mingw32 (для 32 бит).
Применение патчей к исходному коду
Вам необходимо применить 2 патча (огромное спасибо Каю Тиецу из mingw-w64):
Патч для binutils (Устарел) Патч для gcc (Устарел)
Сборка
При необходимости задайте флаги сборки:
64 бита:
export CFLAGS="-g0 -O2 -pipe -Wl,-S" export CXXFLAGS="-g0 -O2 -pipe -Wl,-S" 32 бита:
export CFLAGS="-g0 -O2 -pipe -Wl,-S -march=pentium -mtune=i686" export CXXFLAGS="-g0 -O2 -pipe -Wl,-S -march=pentium -march=i686"
Сборка GMP
Создайте поддиректорию build для сборки gmp:
cd build mkdir gmp cd gmp Находясь в директории build запустите скрипт конфигурирования gmp:
../../src/gmp/configure --prefix=/support --host=i686-w64-mingw32 --build=i686-w64-mingw32 --enable-cxx --disable-shared Теперь соберите всё остальное.
make CPPFLAGS="-fexceptions" И, наконец, установите GMP.
make install
Сборка MPFR
Создайте поддиректорию build для сборки mpfr:
cd build mkdir mpfr cd mpfr Находясь в директории build запустите скрипт конфигурирования mpfr:
../../src/mpfr/configure --prefix=/support --host=i686-w64-mingw32 --build=i686-w64-mingw32 --with-gmp=/support --disable-shared Теперь соберите всё остальное.
make И, наконец, установите MPFR.
make install
Сборка MPC
Создайте поддиректорию build для сборки mpc:
cd build mkdir mpc cd mpc Находясь в директории build запустите скрипт конфигурирования mpc:
../../src/mpc/configure --prefix=/support --host=i686-w64-mingw32 --build=i686-w64-mingw32 --with-gmp=/support --with-mpfr=/support
--disable-shared
Теперь соберите всё остальное.
make И, наконец, установите MPC.
make install
Сборка binutils
Создайте поддиректорию build для сборки binutils:
cd build mkdir binutils cd binutils Находясь в директории build запустите скрипт конфигурирования binutils:
64 бита:
../../src/binutils/configure --prefix=/RosBE64 --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=x86_64-w64-mingw32
--disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE64
32 бита:
../../src/binutils/configure --prefix=/RosBE64 --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32
--disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE64
Теперь соберите всё остальное.
make И, наконец, установите binutils.
make install
Сборка gcc-core
Перейдите в директорию build:
cd .. mkdir gcc cd gcc Теперь запустите запустите скрипт конфигурирования:
64 бита:
../../src/gcc/configure --prefix=/RosBE64 --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=x86_64-w64-mingw32
--with-gmp=/support --with-mpfr=/support --with-mpc=/support --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-checking=release --disable-win32-registry --disable-shared --disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE64 --enable-version-specific-runtime-libs --with-host-libstdcxx="-lstdc++ -lsupc++"
32 бита:
../../src/gcc/configure --prefix=/RosBE64 --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32
--with-gmp=/support --with-mpfr=/support --with-mpc=/support --with-pkgversion="RosBE-Windows" --enable-languages=c,c++ --enable-checking=release --disable-win32-registry --disable-shared --disable-nls --disable-werror --disable-multilib --with-sysroot=/RosBE64 --enable-version-specific-runtime-libs --with-host-libstdcxx="-lstdc++ -lsupc++"
Скомпилируйте gcc-core
make all-gcc и установите его
make install-gcc и, наконец, добавьте его в переменную PATH.
PATH=$PATH:/RosBE64/bin ; export PATH
Сборка crt
Создайте директорию для сборки.
cd .. mkdir mingw-w64-crt cd mingw-w64-crt Запустите скрипт конфигурирования
64 бита:
../../src/mingw-w64/mingw-w64-crt/configure --prefix=/RosBE64 --host=x86_64-w64-mingw32 --build=i686-w64-mingw32 --with-sysroot=/RosBE64 32 бита:
../../src/mingw-w64/mingw-w64-crt/configure --prefix=/RosBE64 --host=i686-w64-mingw32 --build=i686-w64-mingw32 --with-sysroot=/RosBE64 Скомпилируйте
make И установите
make install Скопируйте директорию /RosBE64/x86_64-w64-mingw32 (64 бита) or /RosBE64/i686-w64-mingw32 (32 бита) в /RosBE64/mingw.
Сборка всего остального для gcc
Перейдите в директорию сборки gcc build directory.
cd .. cd gcc И скомпилируйте всё остальное.
make make install
Распространённые ошибки
При компилировании crt:
configure: error: Please check if the mingw-w64 header set and the build/host option are set properly. Убедитесь, что скопировали директорию mingw-headers/include directory как в /RosBE64/x86_64-w64-mingw32 так и в /RosBE64/mingw Убедитесь, что вы правильно установили путь к новому компилятору в переменной PATH Убедитесь, что новый компилятор установлен правильно ("make install-gcc")