ROS builds MINGW-w64
Содержание
Сборка MINGW-w64
... для чайников. Эта статья в первую очередь предназначена для пользователей, не имеющих ни малейшего представления о том, как скомпилировать gcc, но, тем не менее, желающих это сделать. Это лишь небольшая шпаргалка, просто выполняйте все действия по порядку и вы получите, что хотели. Если вам нужно что-то особенное, то нагуглите это самостоятельно ;-)
Установка среды сборки
Скачайте и установите MSYS. Вам потребуются следующие пакеты:
- MSYS-w64 (версия 20111123)
- make (версия 3.82.90)
- Свежий тулчейн mingw-w64 32 bit (отсюда) Вам потребуется файл с именем вроде: 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 бита) или /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")