LINUX.ORG.RU

Как на линуксах собрать gcc под шиндоус?

 ,


0

1

Второй день бьюсь над этой задачей. Данных по сборке кросс-компилятора, который работает под линуксом и собирает виндовые бинарники, предостаточно, и даже вполне подробный туториал в доках mingw-w64 есть, но вот адаптировать его под сборку тулчейна именно для винды у меня не получается.

Вот примерный список команд для сборки, которые я взял из туториала по сборке кросс-компилятора (https://pastebin.com/9rtrrkmw), немного изменив:

export WD=$HOME/mingw-build
export TGT=i686-w64-mingw32

cd ~/binutils/tmp
../configure --prefix=$WD --with-sysroot=$WD --host=$TGT --disable-multilib --disable-nls
make && make install

cd ~/mingw/mingw-w64-headers/tmp
../configure --prefix=$WD/$TGT --host=$TGT
make install

ln -s $WD/{$TGT,mingw}

(здесь копируем исходники gmp, mpc и mpfr в ~/gcc)

cd ~/gcc/tmp
../configure --prefix=$WD --with-sysroot=$WD --host=$TGT --disable-multilib --disable-nls --enable-languages=c,c++
make all-gcc && make install-gcc

cd ~/mingw/mingw-w64-crt
../configure --prefix=$WD/$TGT --with-sysroot=$WD --host=$TGT
make && make install

cd ~/gcc/tmp
make

Ошибка вылетает на последнем make:

checking how to run the C preprocessor... /lib/cpp
configure: error: in `/home/alpha/work/tmp/gcc-7.2.0/bin/i686-w64-mingw32/libgcc':
configure: error: C preprocessor "/lib/cpp" fails sanity check

Почему /lib/cpp, а не что-то более подходящее? Не тот тулчейн? Или я этот умудрился запороть? Или я вообще не в ту сторону копаю? Тапками не бейтесь, вручную мало что собираю, а уж gcc тем более. Чисто из интереса решил попробовать.

Исходники последние (gcc 7.2.0, binutils 2.1.19, mingw-w64 5.0.3 ЕМНИП), кросс тоже последний из арчевского репозитория.


Ответ на: комментарий от tsmx

Вроде того, и GCC и другие программы. Ну и там же, наверное, можно глянуть как это делать. Я не совсем понял зачем на него сослались.

xaizek ★★★★★ ()

Окей Тогда я пойду курить, чё там да как там в этом вашем MXE, но вообще вопрос остаётся открытым, потому что я предпочёл бы исправить то, что я уже напердолил за двое суток, а не кинуть и использовать чей-то готовый костыль.

tsmx ()
Ответ на: комментарий от mos

Просто ТС же ясно сказал, что из интереса собирает, значит ему готовое не особо и нужно.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Это уже не прямо таки configure, а какой-то уже вторичный configure, запускающийся уже мейком. Мне кажется, там всё накрылось уже в начале. Вот отрывок:

configure:2661: checking for i686-w64-mingw32-ar
configure:2688: result: ar
configure:2753: checking for i686-w64-mingw32-lipo
configure:2780: result: lipo
configure:2845: checking for i686-w64-mingw32-nm
configure:2872: result: nm
configure:2937: checking for i686-w64-mingw32-ranlib
configure:2964: result: ranlib
configure:3029: checking for i686-w64-mingw32-strip
configure:3056: result: strip
configure:3118: checking whether ln -s works
configure:3122: result: yes
configure:3139: checking for i686-w64-mingw32-gcc
configure:3166: result: cc -L/home/alpha/work/tmp/cc/i686-w64-mingw32/lib -L/home/alpha/work/tmp/cc/mingw/lib -isystem /home/alpha/work/tmp/cc/i686-w64-mingw32/include -isystem /home/alpha/work/tmp/cc/mingw/include   
configure:3435: checking for C compiler version
configure:3444: cc -L/home/alpha/work/tmp/cc/i686-w64-mingw32/lib -L/home/alpha/work/tmp/cc/mingw/lib -isystem /home/alpha/work/tmp/cc/i686-w64-mingw32/include -isystem /home/alpha/work/tmp/cc/mingw/include    --version >&5
cc (GCC) 7.2.1 20171128

На кой чёрт ему сдался мой арчевский тулчейн? Куда он обрезал префиксы? И почему он использует мой системный gcc версии 7.2.1, который делает линуксовые бинарника, а не тот, что из кросс-компилятора, который 7.2.0? До сих пор всё ж нормально было, ну! И gcc в виде экзешника построился и поставился, и у бинютилсов вопросов не возникло.

То ли лыжи не едут...

tsmx ()
Ответ на: комментарий от tsmx

Он их не обрезал, а попытался найти i686-w64-mingw32-ar, это не получилось и он взял ar. Может что-то не так с $PATH.

xaizek ★★★★★ ()
Ответ на: комментарий от tsmx

Странно. Вроде, должен найти, если файлы там существуют. Из вариантов приходит в голову, что он нашёл что-то не то или что с кэшем что-то не то. Но они какие-то маловероятные.

xaizek ★★★★★ ()
Ответ на: комментарий от tsmx

Нет, видать, что-то не так в другом месте

в голове имхо...(шутка)

тут тебе надо пойти путём кросс-тула. В двух словах - сперва собираешь промежуточный(!!! и самодостаточный) кросс-компилятор заточенный именно под твою задачу, потом чрутишся в него и собираешь(им) уже то что тебе нужно. Этим ты убережёшь свой мозг от траха с неведомыми выкрутасами системного линковщика который каждый раз будеть норовить засунуть в сборку что-нибудь из основной системы.

Если брать уже готовый кросс-компилятор(не собирая самому) то тебе всё равно нужно будет накачивать ему окружение и прочую галиматью, с практической точки зрения проще просто самостоятельно сделать.

Gramozeka ★★ ()
Ответ на: комментарий от Gramozeka

...чрутиться? Я так понял, под безобидным словом «самодостаточный» скрывается пятая глава LFS с ручной постройкой трёх десятков пакетов окружения, вроде coreutils и make?

tsmx ()
Ответ на: комментарий от tsmx

...чрутиться? Я так понял, под безобидным словом «самодостаточный» скрывается пятая глава LFS с ручной постройкой трёх десятков пакетов окружения, вроде coreutils и make?

ну это как тебе угодно, тебе же нужен только гсс, кросс собирается из 13 пакетов(это тот который будет собирать то что тебе нужно) само чрут-окружение полностью строить не обязательно, ты ведь не ставишь целью собирать целую систему, и да, я ведь только предложил один из вариантов, на мой взгляд самый простой, чтобы свести к минимуму «паразитные» наводки из основной системы. Тут мысль такая - (по аналогии, как пример): есть такой пакет как poppler - ему для сборки нужен CMake и Fontconfig, но благодаря «пряморукости» разрабов, если ты попробуешь собрать его в полноценной системе(с православным преферансом и профурсетками) то линковщик напихает в сборку ещё с десяток всяких пакетов просто потому что они есть и просто вырубить их не получится.. это я к тому, что чрут позволяет собрать только то что нужно, а не тянуть из системы всё что найдет configure даже если и указано это не брать(некоторые упоротые например совершенно забывают что в 64-битных дистрибутивах есть lib64 и упорно пытаются искать что-то в lib, и приходиться просто с топором и такой-то матерью выкорчёвывать всё это безобразие)...

я тут на досуге на коленке накидал сборник который строит LFS, но не так как описано в основной ветке, а так как предлагают в CrossLFS, там всё действие в три хода - сперва строится кросс-компилятор, потом временный тул, а потом уже система, вот в твоём случае можно первый и второй шаги приспособить под собирание гсс для винды.

вот всего делов надо-то : https://github.com/gramozeka/CBLFS-SemiAutomatic/blob/master/CLFS-x86_64-Mult...

как и что смотри в описании...

Gramozeka ★★ ()
Последнее исправление: Gramozeka (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.