Як подолати попередження "'aclocal-1.15' відсутній у вашій системі"?


85

Я намагаюся запустити програму c ++ на 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 та прикладом використання, але я не можу змусити це працювати.


1
Ви можете отримати автоматичні інструменти з brewformulas.org/Automake або lists.gnu.org/archive/html/automake/2007-05/msg00010.html
maddouri

1
«Все, що потрібно для запуску з програмами» - вам потрібно все речі , щоб скласти програму, яка в даному випадку включає в себе пакети automake, autoconf, m4, і perl, як повідомлення абсолютно чітко сказано ... «Я думаю , що я скачав Autoconf і automake, але я не впевнений "- Я майже впевнений, що ви принаймні неправильно встановили його. ;-)
DevSolar

Відповіді:


168

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

Редагувати, щоб додати: Це, як правило, спричиняється перевіркою коду з Git, замість того, щоб витягти його з .zipабо .tar.gzархіву. Для того, щоб викликати відновлення при зміні файлів, Git не зберігає позначки часу файлів, тому configureсценарій може здатися застарілим. Як зазначали інші, існують способи обійти це, якщо у вас недостатньо остання версія autoreconf.

Ще одне редагування: Ця помилка також може бути викликана копіюванням вихідної папки, витягнутої з архіву за допомогою scp, на іншу машину. Мітки часу можна оновлювати, вказуючи на необхідність відновлення. Щоб цього уникнути, скопіюйте архів і витягніть його на місці.


Дякую Мортеху! Але тоді я отримую помилку: У файлі, включеному з base / columnfile.cc: 1: ./base/columnfile.h:8:10: фатальна помилка: файл 'kj / debug.h' не знайдений #include <kj / debug .h> Чи мені не вистачає файлу?
Ліам Флінн,

1
Так, вам не вистачає libkj, який є частиною проекту Cap'n Proto. Вам також знадобиться libsnappy.
mortehu

Гаразд, нарешті, у мене є всі необхідні інструменти для налаштування, виготовлення та встановлення. Здається, все працює, але куди дівається виконуваний файл? Не впевнений, що це важливо або доречно, але я отримую таке повідомлення (як частина набагато більшого повідомлення), коли роблю встановлення: # Не ціль: встановлення: # Ціль командного рядка. # Неявний пошук правил не проводився. # Час модифікації ніколи не перевірявся. # Файл не оновлено. Це означає, що вихідний файл не створений?
Ліам Флінн,

Програма повинна закінчуватися як tools/text-classifier/text-classifier. Я не знаю, чому make installце не працює.
mortehu

це може статися, якщо ви запустите ./configure у своєму проекті, а потім оновите automakeпакет
Alec

52

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

Звичайно, цей фокус не дійсний, якщо вам дійсно потрібно відновити ці файли, можливо, тому, що ви змінили їх вручну. Але сподіваємось, розробники пакету поширюють актуальні файли.


І звичайно, якщо ви хочете встановити automakeі друзів, використовуйте відповідний менеджер пакунків для вашого розповсюдження.


Встановіть aclocal, який поставляється з automat:

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

Спробуйте ще раз:

./configure && make 

Після цього я отримую: configure.ac:25: error: Потрібна версія Autoconf версії 2.69 або вище ... ПОПЕРЕДЖЕННЯ: 'aclocal-1.15', мабуть, занадто старий. ... make: *** [aclocal.m4] Помилка 63
Ліам Флінн

а потім після встановлення autoconf v2.69 я отримую: libtool: Помилка невідповідності версії. Це libtool 2.4.2 Debian-2.4.2-1.11, але libtool: визначення цього LT_INIT походить від libtool 2.4.4. libtool: Вам слід відтворити aclocal.m4 за допомогою макросів з libtool 2.4.2 Debian-2.4.2-1.11 libtool: і знову запустити autoconf.
Ліам Флінн,

Переконайтеся, що зробили brew install libtool, то біжіть aclocal, то біжіть autoconf.
emlai

Я оновив libtool, але тепер я отримую: libtool: Помилка невідповідності версії. Це libtool 2.4.2 Debian-2.4.2-1.11, але libtool: визначення цього LT_INIT походить від libtool 2.4.6. libtool: Вам слід відтворити aclocal.m4 за допомогою макросів з libtool 2.4.2 Debian-2.4.2-1.11 libtool: і знову запустити autoconf.
Ліам Флінн,

Це вирішує проблему. Але це не потрібно, оскільки для цього потрібно багато іншого (привілей root, мережеве підключення, більше місця для нового програмного забезпечення тощо). Наведене нижче рішення Droopycon - це (майже) правильна відповідь, оскільки в повідомленні про помилку чітко сказано: "Вам це потрібно, лише якщо ви змінили файли" acinclude.m4 "," configure.ac "або m4, включені в" configure.ac "." .
harihardik

11

Ви можете легко встановити потрібну версію:

Перше отримати джерело:

$ 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 automake) 1.15

Тепер, коли викликається aclocal, ви отримуєте правильну версію.


Це встановлено для мене "aclocal". Я встановив його за допомогою програми встановлення користувацького інтерфейсу CygWin, шукаючи "automake" та вибравши версію 11-1.
justdan23

8

Загальна відповідь, яка може стосуватися цього конкретного випадку чи ні:

Як натякає на повідомлення про помилку, aclocal-1.15 потрібно лише в тому випадку, якщо ви модифікували файли, які використовувались для створення aclocal.m4

Якщо ви не модифікуєте жоден із цих файлів (включаючи configure.ac), вам не потрібно мати aclocal-1.15.

У моєму випадку проблема полягала не в тому, що будь-який із цих файлів був змінений, але якимось чином позначка часу на configure.ac була через 6 хвилин порівняно з aclocal.m4.

Я не зрозумів, чому, але чистий клон мого git repo вирішив проблему для мене. Можливо, щось пов’язане з git і тим, як він створював файли.

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

Можливо також, що хтось вніс зміни в configure.ac, але не відновив aclocal.m4, і в цьому випадку вам дійсно доведеться повторно запустити automake та друзів.


1
Більш відповідна відповідь. Я отримав подібну помилку, оскільки не витягнув вихідні файли з tar, який надається squid. Натомість я скопіював вже витягнуту папку, і мій порядок копіювання файлу був іншим, що спричинило помилку. Я просто повторно витягнув із смоли безпосередньо, і він почав працювати. Я б позначив рішення Droopycon правильною відповіддю, маючи шанс.
harihardik

Блискуче! Раніше я rsyncкопіював вже витягнуті файли з одного сервера на інший (замість того, щоб копіювати стислі архіви джерела), не зберігаючи позначки часу. Коли я скопіював натомість вихідні архіви та витягнув їх на цільовій машині, проблема не сталася. Дякую!
Бен Джонсон,

Дійсно, дуже часто відповідь "Оформити репо свіже". Фантастична відповідь та щедрість!
Fattie,

6

Вся суть Autotools полягає у забезпеченні таємної мови на основі макросів M4, яка в кінцевому підсумку компілюється в скрипт оболонки, який називається ./configure. Ви можете доставити цей скомпільований сценарій оболонки з вихідним кодом, і цей скрипт повинен зробити все, щоб виявити середовище та підготувати програму до побудови. Автоінструменти повинні вимагати лише ті, хто хоче налаштувати тести та оновити цей сценарій оболонки.

Це перемагає точку Autotools, якщо GNU This та GNU That повинні бути встановлені в системі, щоб вона працювала. Спочатку він був винайдений для спрощення перенесення програм на різні системи Unix, на які не можна було розраховувати, щоб у них було щось. Навіть конструкції, використовувані згенерованим кодом оболонки, ./configureповинні були бути дуже ретельно підібрані, щоб переконатися, що вони будуть працювати на кожній зламаній старій оболонці майже скрізь.

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

Як обхідний шлях, ви можете зайти в Makefile і внести деякі зміни, щоб це не заважало. Як приклад, я будую Git-голову GNU Awk і стикаюся з цією ж проблемою. 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's data files. Automake supplies datadir.
 pkgdatadir = $(datadir)/awk
-ACLOCAL = @ACLOCAL@
+ACLOCAL = true
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
+AUTOCONF = true
+AUTOHEADER = true
+AUTOMAKE = true
 AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@

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

Фактичні кроки збірки для Gawk не потребують автозаповнення! Він бере участь у деяких правилах, які викликаються, якщо частини Автозаповнення змінились і їх потрібно повторно обробити. Однак 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=там є командні рядки, де викликався автозапис, де ви бачите trueкоманди. Вони повідомляють про успішне завершення, і тому просто потрапляє через цей мотлох, щоб зробити прокляту збірку, яка ідеально налаштована.

Я зробив це make gawkтому, що є кілька підкаталогів, які будуються, які виходять з ладу; фокус потрібно повторити для відповідних Make-файлів.

Якщо ви стикаєтесь із подібними речами із незайманою, офіційною tarball програми від її розробників, то скаржтесь. Його слід просто розпакувати, ./configureі makeбез необхідності виправляти що-небудь або встановлювати будь-які матеріали Automake або Autoconf.

В ідеалі, потягнення голови Git також повинно вести себе так.


Чому ви вважаєте, що Makefiles зламані? Як зазначено у відповіді emlai, система збірки визнає, що залежності для сформованих файлів застарілі (що може бути лише у випадку зіпсованих міток часу, які ви можете виправити, touchввівши їх). Говорячи про те , що люди , які створили цю систему не розуміє , що вона була створена для (забезпечення того , щоб ви будуєте правильно з усіма залежностями - яка включає в auto*-частини , якщо вони змінилися) і зміни Makefiles ефективно не зробити це абсолютно будь-який більше здається ... неправильно.
Саймон Собіш

@SimonSobisch У вас є ця проблема і ви не можете використати відповідь?
Kaz

Дякую за питання. Ні, у мене не виникає цієї проблеми, але після прочитання Вашого допису я бачу нижній рядок "ця помилка виникає через те, що Makefiles порушені, а не те, якими повинні бути Makefiles" - тоді як Makefiles роблять саме те, що повинні (відбудовують файли, які щоб перебудувати за тими ж правилами, файл об’єкта буде перебудувати із джерела C). У більшості випадків помилка виникає через те, що люди використовують пакети, не пов’язані з dist, без необхідних інструментів, або позначки часу з джерел не працюють «скаржись автору».
Саймон Собіш

Я б ніколи не рекомендував міняти інструмент на true. Якщо ви дійсно хочете виправити зламані деталі "просто тому, що мітки часу" краще бігти make --touchпроти невдалих цілей (якщо ви хочете їх зібрати, запустіть, make --keep-goingщоб отримати список "зламаних" деталей заздалегідь).
Саймон Собіш

@SimonSobisch Чудові пропозиції; звучить так, ніби у вас є початок окремої відповіді. У цьому випадку зміна інструментів на trueраціонально виправдана тим, що ці інструменти непотрібні для побудови програми, а лише для перебудови configureсценарію, який вже доступний у попередньо створеній формі. Торкання міток часу для придушення спроб запуску інструментів досягає того ж ефекту.
Kaz

4

Я думаю, що сенсорна команда - це правильна відповідь, наприклад, зробити щось подібне

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, і, очевидно, те саме стосується і варіння).

Третє припущення вражаюче не вдається у світі з Github. Ця невдача є прикладом мислення "всі думають, що вони є нормативними"; зокрема, супровідники, які є єдиним класом користувачів, яким потрібно редагувати Makefile.am, тепер включили всіх до цього класу.

Можливо, є опція в autowindows, яка не дозволяє цим залежностям додаватися до Makefile.in та / або Makefile.

Бічна панель II [Чому @kaz правильний]: звичайно, очевидно, що для мене та інших пізнавачів просто спробувати послідовність команд [touch], щоб обдурити створений конфігурацією Makefile від повторного запуску configure та автоінструментів. Але справа не в налаштуванні; суть конфігурації полягає в тому, щоб забезпечити якомога більшій кількості користувачів у якомога більшій кількості різних систем просто зробити [./configure && make] і рухатися далі; більшість користувачів не зацікавлені в "голінні як", наприклад, налагодженні помилкових припущень розробників автоінструментів.

Бічна панель III: можна стверджувати, що ./configure, тепер, коли autotools додає ці залежності, є неправильним інструментом побудови, який використовується з розподіленими пакетами Github.

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


4

2018 рік, ще одне рішення ...

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

в деяких випадках просто працює

$ autoreconf -f -i

і нічого іншого .... вирішує проблему.

Ви робите це в каталозі /pcre2-10.30.

Який кошмар.

(Це зазвичай не вирішувало проблему в 2017 році, але зараз зазвичай , здається, вирішує проблему - вони щось виправили. Крім того, здається, ваш Dockerfile тепер зазвичай повинен починатися з "FROM ibmcom / swift-ubuntu"; раніше вам потрібно було дати певна версія / dev-build, щоб вона працювала.)



0

2017 - Висока Сьєрра

Насправді важко змусити autoconf 1.15 працювати на Mac. Ми найняли експерта, щоб він працював. Все працювало красиво.

Пізніше мені довелося оновити Mac до High Sierra.

Трубопровід Docker перестав працювати!

Незважаючи на те, що autoconf 1.15 добре працює на Mac.

Як виправити,

Коротка відповідь, я просто перемістив місцеве репо та знову перевірив репо.

Ця пропозиція зазначена у поєднанні на цій сторінці контролю якості та в інших місцях.

Тоді це спрацювало чудово!

Ймовірно, це пов’язано з файлами aclocal.m4 та подібними файлами . (Але хто знає насправді). Я нескінченно масажував ці файли ... але нічого.

З якоїсь невідомої причини, якщо ви просто подряпаєте репо і отримаєте репо знову: все працює!

Я годинами пробував кожну комбінацію торкання / видалення тощо, тощо, про які йде мова, але ні. Просто перевірте репо з нуля!


Щоб повернути репозиторій автоматичного автоматичного повернення у стан перевірки, ви можете зробити: "make distclean".
Фредерік Оллінгер

Технічно це не команда git. Це очищення сховища після ./configure. Тож це частина automake. Але це повинно працювати на будь-якому сховищі git, яке використовує automake.
Фредерік Оллінгер,

gotchya, це звучить як чудова підказка.
Fattie

"Насправді важко змусити autoconf 1.15 працювати на Mac. Ми найняли ультра-експерта, щоб він працював ..." - Це говорить нам про те, наскільки цей ланцюжок зламаний. І, на жаль, за 20+ років це не було виправлено. Не виправлення - це те, що я роблю виключенням. Якій меті вона служить, щоб залишити її зламаною, щоб люди не могли її використовувати?
jww
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.