Итак, я пытаюсь собрать компилятор GCC (8.1.0) из исходного кода, и у меня возникла проблема. Я пытаюсь создать его в Windows 7, и сначала я попытался собрать версию 8.2.0 и столкнулся с точной проблемой с текущей версией, которую я пытаюсь создать (выяснилось, поскольку версия 8.2.0 вышла 26 июля, два за несколько недель до публикации этого вопроса возникла проблема :)).
Первое, что я делаю, это настраиваю процесс сборки со следующим:
configure --program-suffix=-8.1.0. --enable-languages=c --disable-bootstrap --disable-shared --prefix = "C:\Users\Vuk\Desktop\Diplomski\gcc-8.1.0\objdir"
Ранее я создал каталог objdir, как это рекомендовано официальным руководство. В котором планирую хранить встроенный компилятор.
После предыдущего шага я запускаю:
make -j4
что приводит к нескольким минутам компиляции и первому сообщению об ошибке:
../../intl/localealias.c: In function ‘_nl_expand_alias’:
../../intl/localealias.c:164:25: error: incomplete universal character name \U
locale_alias_path = LOCALE_ALIAS_PATH;
^~~~~~~~~~~~~~~~~
../../intl/localealias.c:164:25: warning: unknown escape sequence: '\V'
../../intl/localealias.c:164:25: warning: unknown escape sequence: '\D'
../../intl/localealias.c:164:25: warning: unknown escape sequence: '\D'
../../intl/localealias.c:164:25: warning: unknown escape sequence: '\g'
../../intl/localealias.c:164:25: warning: unknown escape sequence: '\o'
make[2]: *** [Makefile:133: localealias.o] Error 1
В конце концов появляется второе сообщение об ошибке вместе с гигантской стеной текста, который я не могу отобразить:
make[2]: Leaving directory '/cygdrive/c/Users/Vuk/Desktop/Diplomski/gcc-8.1.0/objdir/libiberty'
config.status: creating Makefile
config.status: creating backtrace-supported.h
config.status: creating config.h
config.status: executing libtool commands
config.status: executing gstdint.h commands
config.status: executing default commands
make[1]: Leaving directory '/cygdrive/c/Users/Vuk/Desktop/Diplomski/gcc-8.1.0/objdir'
make: *** [Makefile:889: all] Error 2
Я не делаю все это из командной строки Windows, вместо этого я использую cygwin64.
@melpomene, ты совершенно прав. И мне смешно, что я не заметил, что \ U, \ V, ... соответствуют пути, по которому я компилировал ...
Замена исходного пути
"C:\Users\Vuk\Desktop\Diplomski\gcc-8.1.0\objdir"
с участием
"C:/Users/Vuk/Desktop/Diplomski/gcc-8.1.0/objdir"
решает проблему.
"C:\Users\Vuk\Desktop\Diplomski\gcc-8.1.0\objdir"
каким-то образом попадает в исходный код (вероятно, через макросы) и вызывает проблемы, потому что\U
,\V
,\D
,\g
,\o
не являются допустимыми escape-последовательностями обратной косой черты в строках.