Подтвердить что ты не робот

Как преодолеть предупреждение "aclocal-1.15" отсутствует в вашей системе?

Я пытаюсь запустить С++-программу на github. (доступно по следующей ссылке https://github.com/mortehu/text-classifier)

У меня есть mac, и я пытаюсь запустить его в терминале. Я думаю, что я загрузил autoconf и automake, но не уверен. Чтобы запустить программу, я перехожу к правильной папке в терминале, а затем запустил

./configure && make 

Но я получаю ошибку:

ПРЕДУПРЕЖДЕНИЕ: "aclocal-1.15" отсутствует в вашей системе.          Вам нужно только это, если вы изменили "acinclude.m4" или          'configure.ac' или m4, включенные в 'configure.ac'.          Программа "aclocal" является частью пакета GNU Automake:          http://www.gnu.org/software/automake         Для запуска также требуются GNU Autoconf, GNU m4 и Perl:          http://www.gnu.org/software/autoconf         http://www.gnu.org/software/m4/         http://www.perl.org/ make: *** [aclocal.m4] Ошибка 127

У меня есть xcode и g++ и все, что нужно для запуска c-программ, но, как очевидно, я не знаю, что я делаю.

Какой самый простой и простой способ запустить программу в приведенной выше ссылке? Я понимаю, что это связано с использованием readme и example, но я не могу заставить это работать.

4b9b3361

Ответ 1

Перед запуском ./configure попробуйте запустить autoreconf -f -i. Программа autoreconf автоматически запускает autoheader, aclocal, automake, autopoint и libtoolize по мере необходимости.

Изменить, чтобы добавить: Это обычно вызывается извлечением кода из Git вместо извлечения его из .zip или .tar.gz. Для запуска перестроений при изменении файлов Git не сохраняет временные метки файлов, поэтому сценарий configure может показаться устаревшим. Как уже упоминали другие, есть способы обойти это, если у вас нет достаточно свежей версии autoreconf.

Другое редактирование: эта ошибка также может быть вызвана копированием исходной папки, извлеченной из архива с помощью scp, на другой компьютер. Временные метки могут быть обновлены, что предполагает необходимость перестроения. Чтобы избежать этого, скопируйте архив и распакуйте его на место.

Ответ 2

Часто вам не нужны никакие инструменты auto*, а простейшим решением является просто запустить touch aclocal.m4 configure в соответствующей папке (а также запустить touch в Makefile.am и Makefile.in, если они существуют). Это обновит метку времени aclocal.m4 и напомнит системе, что aclocal.m4 обновлен и не нуждается в перестройке. После этого лучше всего удалить ваш каталог build и повторно запустить configure с нуля после этого. Я регулярно сталкиваюсь с этой проблемой. Для меня основной причиной является то, что я копирую библиотеку (например, mpfr code для gcc) из другой папки, а временные метки меняются.

Конечно, этот трюк недействителен, если вам действительно нужно восстановить эти файлы, возможно, потому, что вы их вручную изменили. Но, надеюсь, разработчики пакета распространяют обновленные файлы.


И, конечно, если вы хотите установить automake и друзей, используйте соответствующий пакет-менеджер для своего распространения.


Установите aclocal, который поставляется с automake:

brew install automake          # for Mac
apt-get install automake       # for Ubuntu

Повторите попытку:

./configure && make 

Ответ 3

Общий ответ, который может или не относится к данному конкретному случаю:

Как подсказывает сообщение об ошибке, aclocal-1.15 должен быть необходим только в том случае, если вы изменили файлы, которые были использованы для генерации aclocal.m4

Если вы не изменяете ни один из этих файлов (включая configure.ac), вам не нужно иметь aclocal-1.15.

В моем случае проблема заключалась не в том, что какой-либо из этих файлов был изменен, но как-то временная метка на configure.ac была на 6 минут позже по сравнению с aclocal.m4.

Я не понял, почему, но чистый клон моего репозитория git решил проблему для меня. Возможно, что-то связано с git и тем, как оно создало файлы в первую очередь.

Вместо того, чтобы повторно запускать autoconf и друзей, я бы просто попытался получить чистый клон и повторить попытку.

Также возможно, что кто-то совершил изменение configure.ac, но не восстановил aclocal.m4, и в этом случае вам действительно нужно перезапустить automake и друзей.

Ответ 4

Вся суть Autotools заключается в предоставлении тайного языка на основе M4-макросов, который в конечном итоге компилируется в оболочку script, называемую ./configure. Вы можете отправить эту скомпилированную оболочку script с исходным кодом и что script должен сделать все, чтобы обнаружить среду и подготовить программу для построения. Autotools должен требовать только тот, кто хочет настроить тесты и обновить эту оболочку script.

Это поражает точку Autotools, если GNU Это и GNU. Это должно быть установлено в системе для ее работы. Первоначально было изобретено упрощение переноса программ на различные Unix-системы, которые нельзя было рассчитывать на то, чтобы иметь что-либо на них. Даже конструкции, созданные сгенерированным кодом оболочки в ./configure, должны были быть очень тщательно отобраны, чтобы убедиться, что они будут работать на каждой разбитой старой оболочке почти везде.

Проблема, с которой вы столкнулись, связана с некоторыми сломанными шагами Makefile, изобретенными людьми, которые просто не понимают, что такое Autotools, и роль окончательного ./configure script.

В качестве обходного пути вы можете войти в Makefile и внести некоторые изменения, чтобы избежать этого. Например, я создаю головку GNU Awk Git и запускаю эту проблему. Однако я применил этот патч к Makefile.in, и я могу успешно make gawk:

diff - git a/Makefile.in b/Makefile.in

index 5585046..b8b8588 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -312,12 +312,12 @@ distcleancheck_listfiles = find . -type f -print

 # Directory for gawk data files. Automake supplies datadir.
 pkgdatadir = $(datadir)/awk
-ACLOCAL = @[email protected]
+ACLOCAL = true
 AMTAR = @[email protected]
 AM_DEFAULT_VERBOSITY = @[email protected]
-AUTOCONF = @[email protected]
-AUTOHEADER = @[email protected]
-AUTOMAKE = @[email protected]
+AUTOCONF = true
+AUTOHEADER = true
+AUTOMAKE = true
 AWK = @[email protected]
 CC = @[email protected]
 CCDEPMODE = @[email protected]

В принципе, я изменил ситуацию так, чтобы безвредная команда оболочки true была заменена для всех программ Auto-stuff.

Фактические шаги сборки для Gawk не нужны для Auto-stuff! Он задействован только в некоторых правилах, которые вызываются, если части Автофайла изменились и их необходимо переработать. Однако Makefile структурирован таким образом, что он не работает, если инструменты отсутствуют.

Перед описанным выше патчем:

$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/kaz/gawk/missing aclocal-1.15 -I m4
/home/kaz/gawk/missing: line 81: aclocal-1.15: command not found
WARNING: 'aclocal-1.15' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127

После патча:

$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && true -I m4
CDPATH="${ZSH_VERSION+.}:" && cd . && true
gcc -std=gnu99 -DDEFPATH='".:/usr/local/share/awk"' -DDEFLIBPATH="\"/usr/local/lib/gawk\"" -DSHLIBEXT="\"so"\" -DHAVE_CONFIG_H -DGAWK -DLOCALEDIR='"/usr/local/share/locale"' -I.     -g -O2 -DNDEBUG -MT array.o -MD -MP -MF .deps/array.Tpo -c -o array.o array.c 
[...]
gcc -std=gnu99  -g -O2 -DNDEBUG  -Wl,-export-dynamic -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o dfa.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o getopt.o getopt1.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o random.o re.o regex.o replace.o str_array.o symbol.o version.o      -ldl -lm
$ ./gawk --version
GNU Awk 4.1.60, API: 1.2
Copyright (C) 1989, 1991-2015 Free Software Foundation.
[...]

Там мы идем. Как вы можете видеть, в командных строках CDPATH= есть место, где вызывается Auto-stuff, где вы видите команды true. Они сообщают об успешном завершении, и поэтому он просто падает через этот мусор, чтобы сделать черную сборку, которая идеально настроена.

Я сделал make gawk, потому что есть некоторые подкаталоги, которые создаются, которые терпят неудачу; трюк должен быть повторен для их соответствующих Makefile.

Если вы сталкиваетесь с подобным делом с нетронутым официальным архивом программы от своих разработчиков, то жалуйтесь. Он должен просто распаковать ./configure и make без необходимости исправления каких-либо или установки каких-либо материалов Automake или Autoconf.

В идеале, притяжение их головы Git должно также вести себя таким образом.

Ответ 5

Вы можете легко установить нужную версию:

Сначала получите источник:

$ wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz

Распакуйте его:

$ tar -xzvf automake-1.15.tar.gz

Сборка и установка:

$ cd automake-1.15
$ ./configure  --prefix=/opt/aclocal-1.15
$ make
$ sudo mkdir -p /opt
$ sudo make install

Используйте его:

$ export PATH=/opt/aclocal-1.15/bin:$PATH
$ aclocal --version

aclocal (автомат GNU) 1.15

Теперь, когда вызывается aclocal, вы получаете нужную версию.

Ответ 6

2018, еще одно решение...

https://github.com/apereo/mod_auth_cas/issues/97

в некоторых случаях просто работает

$ autoreconf -f -i

и больше ничего.... решает проблему.

Вы делаете это в каталоге /pcre2-10.30.

Какой кошмар.

(Это обычно не решало проблему в 2017 году, но теперь, как правило, похоже, решает проблему - они что-то исправили. Кроме того, кажется, что ваш Dockerfile должен теперь обычно начинаться с "FROM ibmcom/swift-ubuntu"; ранее вы должны были дать определенная версия /dev-build, чтобы она работала.)

Ответ 7

Проблема не в пакете automake, это репозиторий

sudo apt-get install automake

Устанавливает версию aclocal-1.4, поэтому вы не можете найти 1.5 (в Ubuntu 14,15)

Используйте этот script для установки последних https://github.com/gp187/nginx-builder/blob/master/fix/aclocal.sh

Ответ 8

Я думаю, что сенсорная команда является правильным ответом, например, сделать что-то вроде

touch --date="'date'" aclocal.m4 Makefile.am configure Makefile.in

до [./configure && make].

Боковая панель I: В противном случае я согласен с @kaz: добавление зависимостей для aclocal.m4 и/или configure и/или Makefile.am и/или Makefile.in делает предположения о целевой системе, которые могут быть недействительными. В частности, эти предположения

1) что все целевые системы имеют автоинструменты,

2) что все целевые системы имеют одинаковую версию автоинструментов (например, в данном случае automake.1.15).

3) что если (1) или (2) не соответствуют действительности для какого-либо пользователя, то пользователь извлекает пакет из созданного сопровождающим формата TAR или ZIP, который поддерживает временные метки соответствующих файлов, и в этом случае все autotool/configure/Makefile.am/Makefile.in зависимости в сгенерированном при конфигурировании Makefile будут удовлетворены до того, как будет выполнена команда make.

Второе предположение не выполняется во многих системах Mac, потому что automake.1.14 является "последним" для OSX (по крайней мере, это то, что я вижу в MacPorts, и, очевидно, то же самое верно для brew).

Третье предположение проваливается эффектно в мире с Github. Эта неудача является примером мышления "все думают, что они нормативные"; в частности, сопровождающие, которые являются единственным классом пользователей, которому необходимо редактировать Makefile.am, теперь поместили всех в этот класс.

Возможно, в autowhith есть опция, которая предотвращает добавление этих зависимостей в Makefile.in и/или Makefile.

Боковая панель II [Почему @kaz прав]: для меня и других cognoscenti, конечно, просто попробовать последовательность команд [touch], чтобы обмануть созданный при конфигурировании Makefile от повторного запуска configure и autotools. Но дело не в настройке; Смысл настройки заключается в том, чтобы как можно больше пользователей в максимально разных системах могли просто сделать [./configure && make] и двигаться дальше; большинство пользователей не заинтересованы в "бритье яка", например, отладке ошибочных предположений разработчиков автоинструментов.

Боковая панель III: можно утверждать, что. /configure, теперь, когда autotools добавляет эти зависимости, является неправильным инструментом сборки для использования с распределенными пакетами Github.

Боковая панель IV: возможно, репозитории Github на основе конфигурации должны поместить необходимую сенсорную команду в свой файл readme, например https://github.com/drbitboy/Tycho2_SQLite_RTree.

Ответ 9

2017 - Высокая Сьерра

С Autoconf 1.15 действительно сложно работать на Mac. Мы наняли эксперта, чтобы он заработал. Все работало прекрасно.

Позже мне довелось обновить Mac до High Sierra.

Докерский трубопровод перестал работать!

Несмотря на то, AUTOCONF 1.15 работает отлично на Mac.

Как исправить,

Короткий ответ, я просто разгромил локальное репо и снова проверил репо.

Это предложение отмечено в миксе на этой странице QA и в других местах.

Затем он работал нормально!

Скорее всего, это как-то связано с aclocal.m4 и подобными файлами. (Но кто знает, на самом деле). Я бесконечно массировал эти файлы... но ничего.

По какой-то неизвестной причине, если вы просто поцарапаете репо и снова получите репо: все работает!

Я пытался часами каждую комбинацию касаться/удалять и т.д. И др. Файлов, о которых идет речь, но нет. Просто проверьте репо с нуля!