Я хочу установить, делают 3.81 на Ubuntu 18.04.
Таким образом, я загружаю эту версию, делают и выполняют./настраивать и затем делают. Но когда компиляция его дает мне эту ошибку:
./glob/glob.c: In function ‘glob’:
./glob/glob.c:581:23: warning: implicit declaration of function ‘__alloca’; did you mean ‘alloca’? [-Wimplicit-function-declaration]
newp = (char *) __alloca (dirlen + 1);
^~~~~~~~
alloca
./glob/glob.c:581:14: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
newp = (char *) __alloca (dirlen + 1);
^
./glob/glob.c:709:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
newp = (char *) __alloca (home_len + dirlen);
^
./glob/glob.c:732:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
newp = (char *) __alloca (end_name - dirname);
^
./glob/glob.c:783:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
newp = (char *) __alloca (home_len + rest_len + 1);
^
./glob/glob.c:814:11: warning: implicit declaration of function ‘__stat’; did you mean ‘__xstat’? [-Wimplicit-function-declaration]
: __stat (dirname, &st)) == 0
^~~~~~
__xstat
./glob/glob.c: In function ‘glob_in_dir’:
./glob/glob.c:1256:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1);
^
./glob/glob.c:1283:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
names = (struct globlink *) __alloca (sizeof (struct globlink));
^
./glob/glob.c:1341:32: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
struct globlink *new = (struct globlink *)
^
./glob/glob.c:1367:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
names = (struct globlink *) __alloca (sizeof (struct globlink));
Та же ситуация при создании версии 3.82. Моя текущая версия делает, 4.1.
Кто-либо, знают то, что могло быть неправильным?
Спасибо
Править:
glob/libglob.a(glob.o): In function `glob_in_dir': /opt/make-3.81/glob/glob.c:1361: undefined reference to `__alloca' /opt/make-3.81/glob/glob.c:1336: undefined reference to `__alloca' /opt/make-3.81/glob/glob.c:1277: undefined reference to `__alloca' /opt/make-3.81/glob/glob.c:1250: undefined reference to `__alloca' glob/libglob.a(glob.o): In function `glob': /opt/make-3.81/glob/glob.c:575: undefined reference to `__alloca' glob/libglob.a(glob.o):/opt/make-3.81/glob/glob.c:726: more undefined references to `__alloca' follow collect2: error: ld returned 1 exit status Makefile:410: recipe for target 'make' failed make[2]: *** [make] Error 1 make[2]: Leaving directory '/opt/make-3.81' Makefile:603: recipe for target 'all-recursive' failed make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory '/opt/make-3.81' Makefile:326: recipe for target 'all' failed make: *** [all] Error 2
Каждая новая версия gcc изменяется немного согласно стандартному или лучшему соблюдению стандарта. Одна вещь, которую я заметил, состоит в том, что это становится более строгим и более строгим. Так, например, у Вас мог бы быть код из 5 лет назад, который скомпилирует прекрасные 5 лет назад, но с последней версией gcc, можно получить все эти предупреждения и ошибки.
Это похоже, делают 3.81, использовался в надежном человеке Ubuntu: сделайте 3.81. Также похоже, что надежный человек Ubuntu использовал gcc 4.8.2. Так, одна вещь, которую можно попробовать, состоит в том, чтобы установить gcc 4.x и использование это для компиляции.
В Ubuntu 18.04 установите пакет gcc-4.8. Затем тип./настр - справка. Вы будете видеть список переменных среды, которые можно установить, который изменит компилятор. Это также объяснено здесь.
Я думаю, что это будет работать. (Я должен был сделать что-то подобное прежде.)
Это надеется быть проблемой с gcc версией 7.3.0 (7.3.0-27ubuntu1~18.04 Ubuntu)
По некоторым причинам значение по умолчанию компилятора #defines не в соответствии с тем, что делает ожидаемыми. Я добираюсь, то же создание задач делают 4.2.1, который является последним.
Я изменил glob/glob.c строки 211 onwward, чтобы быть:
if 1 // !defined __alloca && !defined __GNU_LIBRARY__
if 1 // ifdef __GNUC__
undef alloca
define alloca(n) __builtin_alloca (n)
Вынудить glob.c использовать встроенное. Это работает. И, кажется, Ваша проблема также с более старым, делают.
У меня НЕ было этой проблемы при создании, делают в соответствии с Ubuntu 16.04.