Имя: Пароль:
IT
Админ
ошибка make (linux) при сборке gcc
0 vde69
 
18.09.22
20:25
решил обновить компилятор GCC, пробовал разные версии, пока остановился на 8 версии, по идее она меня должна устроить.

Установку выполняю так:

cd /i-data/d2761c3e/compilephp

tar -xzvf /i-data/d2761c3e/compilephp/gcc-8.1.0.tar.gz

cd /i-data/d2761c3e/compilephp/gcc-8.1.0

/i-data/d2761c3e/.PKG/multiple-php/make/bin/make clean

./configure --prefix=/i-data/d2761c3e/.PKG/multiple-php/gcc --with-local-prefix=/i-data/d2761c3e/.PKG/multiple-php/gcc --with-mpfr=/i-data/d2761c3e/.PKG/multiple-php/mpfr --with-mpfr-include=/i-data/d2761c3e/.PKG/multiple-php/mpfr/include --with-mpc=/i-data/d2761c3e/.PKG/multiple-php/mpc --with-mpc-include=/i-data/d2761c3e/.PKG/multiple-php/mpc/include --with-gmp=/i-data/d2761c3e/.PKG/multiple-php/gmp --with-gmp-include=/i-data/d2761c3e/.PKG/multiple-php/gmp/include --enable-languages=c,c++ --includedir=/i-data/d2761c3e/compilephp/gcc-8.1.0/include

/i-data/d2761c3e/.PKG/multiple-php/make/bin/make

установлены из исходников библиотеки
    mpfr-4.1.0
    mpc-1.2.1
    gmp-6.2.1
но вот тут происходит ошибка, если упрощенно - то ошибка вываливается на выполнении
-------------------------------------------------------------------------------
g++ -std=gnu++98   -g -DIN_GCC     -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wwrite-strings -Wcast-qual -Wno-format -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common  -DHAVE_CONFIG_H -DGENERATOR_FILE -fno-PIE -static-libstdc++ -static-libgcc  -no-pie -o build/genmddeps  build/genmddeps.o build/read-md.o build/errors.o ../../build-armv7l-unknown-linux-uclibceabi/libiberty/libiberty.a
g++: unrecognized option '-no-pie'
build/read-md.o: In function `~md_reader':
/i-data/d2761c3e/compilephp/gcc-8.1.0/host-armv7l-unknown-linux-uclibceabi/gcc/../.././gcc/read-md.c:1039: undefined reference to `_obstack_free'
/i-data/d2761c3e/compilephp/gcc-8.1.0/host-armv7l-unknown-linux-uclibceabi/gcc/../.././gcc/read-md.c:1042: undefined reference to `_obstack_free'
/i-data/d2761c3e/compilephp/gcc-8.1.0/host-armv7l-unknown-linux-uclibceabi/gcc/../.././gcc/read-md.c:1045: undefined reference to `_obstack_free'
collect2: ld returned 1 exit status
make[3]: *** [Makefile:2869: build/genmddeps] Error 1
make[3]: Leaving directory '/i-data/d2761c3e/compilephp/gcc-8.1.0/host-armv7l-unknown-linux-uclibceabi/gcc'
make[2]: *** [Makefile:4616: all-stage1-gcc] Error 2
make[2]: Leaving directory '/i-data/d2761c3e/compilephp/gcc-8.1.0'
make[1]: *** [Makefile:22960: stage1-bubble] Error 2
make[1]: Leaving directory '/i-data/d2761c3e/compilephp/gcc-8.1.0'
make: *** [Makefile:944: all] Error 2

-----------------------------------------------------------------------------------------

все облазил, не понимаю чего и где смотреть, все советы в инете сводятся к переустановке компилятора, но именно это и вызывает ошибку.....
1 vde69
 
18.09.22
20:50
добавлю:

_obstack_free - объявляется в файле obstack.h вот так
extern void _obstack_free (struct obstack *, void *); // кстати где он реально определен я не нашел, как я понимаю extern - это виртуальное определение
его я даже скопировал в папку где лежит read-md.c

в файле read-md.c есть
#include "read-md.h"

а в файле read-md.h есть
#include "obstack.h"
2 Йохохо
 
18.09.22
21:09
https://github.com/Freetz/freetz/blob/master/toolchain/make/target/binutils/2.26/400-uClibc_obstack_interface.freetz.patch там в ковычках про uclibc, но по опыту пытаться чинить это бестолку
3 Biker
 
18.09.22
21:13
Зачем ты под арм собираешь?
4 ansh15
 
18.09.22
21:14
Что-то похожее https://blog.fearcat.in/a?ID=01000-f21e907a-2dcd-4e3a-8c99-91fb4206df69
Решение так себе, но автор пишет, что успешно.
5 vde69
 
18.09.22
22:42
(4) как Вы это находите? я полдня искал ничего подобного не видел....

я думаю, что (4) должно сработать и собственно подход для меня вполне понятный и вроде все должно нормально работать :)
6 ansh15
 
18.09.22
23:23
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_3.html
Собственно, и у разработчика gcc  (в древности) такая же рекомендация в одном из случаев, только наоборот.
Replace every occurrence of obstack_free in the file `tree.c' with _obstack_free.
7 vde69
 
18.09.22
23:51
следующая непонятка - выдает, что нужен /usr/include его у меня нет (у меня он живет тут /i-data/d2761c3e/.PKG/ffp/ffproot/ffp/include ). И сделать симлинк в /usr/ я не могу (он только для чтения). Запуск с явным указанием каталога не помогает, та-же ошибка

INCLUDE_PATH="/i-data/d2761c3e/.PKG/ffp/ffproot/ffp/include" /i-data/d2761c3e/.PKG/multiple-php/make/bin/make

ему не хватает каких-то конкретных файлов, или просто не работает передача через INCLUDE_PATH ?

собственно ошибка здесь:
-----------------------------------------------------------------------------

/ffp/bin/sh ../.././gcc/../move-if-change tmp-fixinc_list fixinc_list
echo timestamp > s-fixinc_list
rm -rf include-fixed; mkdir include-fixed
chmod a+rx include-fixed
if [ -d ../prev-gcc ]; then \
  cd ../prev-gcc && \
  /i-data/d2761c3e/.PKG/multiple-php/make/bin/make real-install-headers-tar DESTDIR=`pwd`/../gcc/ \
    libsubdir=. ; \
else \
  set -e; for ml in `cat fixinc_list`; do \
    sysroot_headers_suffix=`echo ${ml} | sed -e 's/;.*$//'`; \
    multi_dir=`echo ${ml} | sed -e 's/^[^;]*;//'`; \
    fix_dir=include-fixed${multi_dir}; \
    if ! false && test ! -d `echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`; then \
      echo The directory that should contain system headers does not exist: >&2 ; \
      echo "  `echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`" >&2 ; \
      tooldir_sysinc=`echo "/i-data/d2761c3e/.PKG/multiple-php/gcc/lib/gcc/armv7l-unknown-linux-uclibceabi/8.1.0/../../../../armv7l-unknown-linux-uclibceabi/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
      if test "x`echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`" = "x${tooldir_sysinc}"; \
      then sleep 1; else exit 1; fi; \
    fi; \
    /ffp/bin/sh ../.././gcc/../mkinstalldirs ${fix_dir}; \
    chmod a+rx ${fix_dir} || true; \
    (TARGET_MACHINE='armv7l-unknown-linux-uclibceabi'; srcdir=`cd ../.././gcc; ${PWDCMD-pwd}`; \
      SHELL='/ffp/bin/sh'; MACRO_LIST=`${PWDCMD-pwd}`/macro_list ; \
      gcc_dir=`${PWDCMD-pwd}` ; \
      export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
      cd ../../build-armv7l-unknown-linux-uclibceabi/fixincludes && \
      /ffp/bin/sh ./fixinc.sh "${gcc_dir}/${fix_dir}" \
        `echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`  ); \
    rm -f ${fix_dir}/syslimits.h; \
    if [ -f ${fix_dir}/limits.h ]; then \
      mv ${fix_dir}/limits.h ${fix_dir}/syslimits.h; \
    else \
      cp ../.././gcc/gsyslimits.h ${fix_dir}/syslimits.h; \
    fi; \
    chmod a+r ${fix_dir}/syslimits.h; \
  done; \
fi
The directory that should contain system headers does not exist:
  /usr/include
make[3]: *** [Makefile:3091: stmp-fixinc] Error 1
make[3]: Leaving directory '/i-data/d2761c3e/compilephp/gcc-8.1.0/host-armv7l-unknown-linux-uclibceabi/gcc'
make[2]: *** [Makefile:4616: all-stage1-gcc] Error 2
make[2]: Leaving directory '/i-data/d2761c3e/compilephp/gcc-8.1.0'
make[1]: *** [Makefile:22960: stage1-bubble] Error 2
make[1]: Leaving directory '/i-data/d2761c3e/compilephp/gcc-8.1.0'
make: *** [Makefile:944: all] Error 2
8 Garykom
 
гуру
19.09.22
04:06
(7) у тебя ошибка что ты пытаешься собрать gcc на целевом девайсе с урезанным фактически линуксом
хотя образы для подобных девайсов компилят на больших компах на x86/x64 через разные тулчайны путем кросскомпиляции под целевую платформу
9 Garykom
 
гуру
19.09.22
04:07
(8)+ я тоже с этим столкнулся при попытке компилить Go на целевых
тупо например памяти не хватает и падает
или каких то зависимостей если cgo юзаешь
10 rphosts
 
19.09.22
04:41
(9) и как GO? В книгу знаний статью типа "Пусть в GO" напишешь?
11 Garykom
 
гуру
19.09.22
04:48
(10) Старое Go прекрасно
Но что делают/добавляют в новых версиях мне уже не нравится
Например система пакетов разных версий с зависимостями это прямой путь к их аду как уже c JS на NodeJS произошло

Т.е. в языке уже все замечательно а они вместо расширения прикладного "встроенного" функционала начинают разным синтаксическим сахаром обваливать и прочим хламом
Который уже убил другие ЯП, сделав их переусложненными
12 vde69
 
19.09.22
10:06
(8) а не подскажешь название продуктов для копирования среды с девайса на большой комп в виртуалку

(7) как я понял (почитав в инете) тут проблема в кривой генерации сценария для "make" (не везде учитываются флаги поиска "include"), то есть надо править сценарий (добавлять параметры). Вечером буду пробовать...
13 Garykom
 
гуру
19.09.22
10:46
(12) >а не подскажешь название продуктов для копирования среды с девайса на большой комп в виртуалку

Есть замечательный продукт "dd"
Но вероятно тебе надо https://habr.com/ru/post/271011/
14 Garykom
 
гуру
19.09.22
10:49
(13)+ https://www.synology.com/ru-ru/support/developer#tool
хз какой у тебя девайс уже не помню
15 Gary417
 
19.09.22
11:12
(12) "The directory that should contain system headers does not exist:"
для сборки большинства софта в линуксе нужны header файлы ядра, на большом линуксе есть пакет чёто типа linux-headers


проблема не в сценарии, проблема в неподготовленном окружении
16 vde69
 
19.09.22
11:22
(15) хедеры у меня есть, у меня стоит FFP Stick только не на флешке а на диске, по этому я особо не боюсь поломать ядро.
17 Кирпич
 
19.09.22
11:27
(16) Сдурел чтоли, компилить gcc на каком то стике? Полгода ждать будешь, пока скомлилится?
18 vde69
 
19.09.22
11:32
(17) думаю 10...20 минут занимает

PHP 7.4 компилировался менее 10 минут, правда не со всеми библиотеками которые мне нужны. Собственно мне gcc новый нужен для компиляции последней библиотеки которая мне нужна в PHP
19 Кирпич
 
19.09.22
11:34
(18) ну и компилировал бы на нормальном компе. зачем это тащить на какую то флешку
20 Garykom
 
гуру
19.09.22
12:50
21 vde69
 
19.09.22
13:13
оставлю для себя ссылку на пакет - https://buildroot.org/downloads/manual/manual.html


ну и
strip - удаление из объектного файла таблицы имен и информации о номерах строк
ld - редактор связей для об ектных файлов обычного формата
22 vde69
 
20.09.22
10:32
кто подскажет по Makefile

cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)
    +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
          $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)


как я понимаю это все примерно так выглядит

для файла cc1plus
проверить условие $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)
и выполнить линковку

вопрос про условие, чего значат эти параметры? учитывая, что там пробелы а не табы то это все одно условие.

Интуитивно я подозреваю, что проверяется контрольная сумма, но вот чего и с чем - не понятно
23 Salimbek
 
20.09.22
12:48
(22) Вот тут понятно описано: https://habr.com/ru/post/155201/