Я пытаюсь запустить программу на 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 и примером использования, но я не могу заставить его работать.
automake
,autoconf
,m4
, иperl
, как сообщение совершенно четко сказано ... «Я думаю , что я скачал Autoconf и automake, но я не уверен »- я почти уверен, что вы, по крайней мере , не установили его должным образом. ;-)Ответы:
Перед бегом
./configure
попробуйте запуститьautoreconf -f -i
. Программа autoreconf автоматически запускает autoheader, aclocal, automake, autopoint и libtoolize по мере необходимости.Редактировать для добавления: обычно это вызвано извлечением кода из Git вместо его извлечения из архива
.zip
или.tar.gz
. Чтобы инициировать перестройку при изменении файлов, Git не сохраняет временные метки файлов, поэтомуconfigure
сценарий может показаться устаревшим. Как уже упоминали другие, есть способы обойти это, если у вас нет достаточно последней версииautoreconf
.Другое редактирование: эта ошибка также может быть вызвана копированием исходной папки, извлеченной из архива с помощью scp, на другой компьютер. Отметки времени могут быть обновлены, предполагая, что необходима перестройка. Чтобы этого не произошло, скопируйте архив и распакуйте его на место.
источник
tools/text-classifier/text-classifier
. Не знаю, почемуmake install
не работает.automake
пакетЧасто вам не нужны никакие
auto*
инструменты и самое простое решение , чтобы просто запуститьtouch aclocal.m4 configure
в соответствующей папке (а также работатьtouch
наMakefile.am
иMakefile.in
если они существуют). Это обновит метку времениaclocal.m4
и напомнит системе, чтоaclocal.m4
она актуальна и не требует восстановления. После этого, вероятно, лучше всего очиститьbuild
каталог и перезапустить егоconfigure
с нуля. Я регулярно сталкиваюсь с этой проблемой. Для меня основная причина в том, что я копирую библиотеку (например,mpfr
код дляgcc
) из другой папки, и временные метки меняются.Конечно, этот прием недействителен, если вам действительно нужно регенерировать эти файлы, возможно, потому, что вы изменили их вручную. Но есть надежда, что разработчики пакета распространяют файлы в актуальном состоянии.
И конечно, если вы все-таки хотите установить
automake
и дружить, то используйте соответствующий пакет-менеджер для вашего дистрибутива.Установите aclocal, который поставляется с automake:
brew install automake # for Mac apt-get install automake # for Ubuntu
Попробуйте снова:
источник
brew install libtool
, затем бегитеaclocal
, затем бегитеautoconf
.Вы можете легко установить нужную вам версию:
Сначала получите исходный код:
$ 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-1.15 требуется только в том случае, если вы изменили файлы, которые использовались для создания aclocal.m4.
Если вы не изменяете ни один из этих файлов (включая configure.ac), вам не потребуется aclocal-1.15.
В моем случае проблема заключалась не в том, что какой-либо из этих файлов был изменен, а в том, что временная метка в configure.ac была на 6 минут позже, чем в aclocal.m4.
Я не понял почему, но чистый клон моего репозитория git решил проблему для меня. Может быть, что-то связано с git и с тем, как он вообще создавал файлы.
Вместо того, чтобы повторно запускать autoconf и друзей, я бы просто попытался получить чистый клон и повторить попытку .
Также возможно, что кто-то внес изменения в configure.ac, но не восстановил aclocal.m4, и в этом случае вам действительно придется повторно запустить automake и друзей.
источник
rsync
копировать уже извлеченные файлы с одного сервера на другой (вместо копирования сжатых исходных архивов) без сохранения временных меток. Когда я вместо этого скопировал исходные архивы и распаковал их на целевой машине, проблемы не возникло. Спасибо!Вся суть 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
команда оболочки заменяла все программы автозаполнения.Фактические шаги сборки для 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
потому что есть некоторые подкаталоги, которые создаются, но не работают; этот трюк нужно повторить для соответствующих файлов Makefile.Если вы столкнетесь с подобными вещами с чистым официальным архивом программы от его разработчиков, то пожалейте. Его нужно просто распаковать,
./configure
иmake
вам не нужно ничего исправлять или устанавливать какие-либо материалы Automake или Autoconf.В идеале, их Git-голова тоже должна вести себя таким же образом.
источник
touch
вставив их). Сказать, что люди, которые создали эту систему, не понимают, для чего она была создана (гарантируя, что вы строите правильно со всеми зависимостями - включая -auto*
части, если они были изменены), и изменение Makefile, чтобы эффективно не делать этого полностью больше кажется ... неправильным.true
. Если вы действительно хотите исправить части, которые сломаны «только потому, что временные метки», лучше работатьmake --touch
с ошибочными целями (если вы хотите собрать их, запустите,make --keep-going
чтобы получить список «сломанных» частей заранее).true
рационально оправдано тем фактом, что эти инструменты не нужны для сборки программы, а нужны только для пересборкиconfigure
скрипта, который уже доступен в готовой форме. Прикосновение к отметкам времени для подавления попыток запуска инструментов дает тот же эффект.Я думаю, что сенсорная команда - это правильный ответ, например, сделайте что-нибудь вроде
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, созданном с помощью configure, будут удовлетворены до того, как будет запущена команда make.
Второе предположение не работает на многих системах Mac, потому что automake.1.14 является "последним" для OSX (по крайней мере, это то, что я вижу в MacPorts, и, очевидно, то же самое верно и для brew).
Третье предположение совершенно не соответствует действительности в мире с Github. Эта неудача является примером мышления «все думают, что они нормативные»; в частности, сопровождающие, которые являются единственным классом пользователей, которым необходимо редактировать Makefile.am, теперь поместили всех в этот класс.
Возможно, в autowhatever есть опция, которая предотвращает добавление этих зависимостей в Makefile.in и / или Makefile.
Боковая панель II [Почему @kaz прав]: конечно, для меня и других знатоков очевидно, что нужно просто попробовать последовательность команд [touch], чтобы обмануть созданный configure Makefile от повторного запуска configure и автоинструментов. Но дело не в настройке; цель настройки - убедиться, что как можно больше пользователей в максимально возможном количестве различных систем могут просто выполнить [./configure && make] и двигаться дальше; большинство пользователей не заинтересованы в «бритье яка», например, в отладке ошибочных предположений разработчиков автоинструментов.
Боковая панель III: можно утверждать, что ./configure, теперь, когда autotools добавляет эти зависимости, является неправильным инструментом сборки для использования с пакетами, распространяемыми Github.
Боковая панель IV: возможно, репозитории Github на основе конфигурации должны поместить необходимую команду касания в свои readme, например https://github.com/drbitboy/Tycho2_SQLite_RTree .
источник
2018, еще одно решение ...
https://github.com/apereo/mod_auth_cas/issues/97
в некоторых случаях просто работает
и больше ничего .... решает проблему.
Вы делаете это в каталоге
/pcre2-10.30
.Какой кошмар.
(Обычно это не решало проблему в 2017 году, но теперь , похоже, решает проблему - они что-то исправили. Кроме того, похоже, что ваш Dockerfile теперь обычно должен начинаться с «FROM ibmcom / swift-ubuntu»; раньше вам приходилось указывать определенная версия / dev-build, чтобы он работал.)
источник
Проблема не в
automake
пакете, а в репозиторииsudo apt-get install automake
Устанавливает версию
aclocal-1.4
, поэтому не можете найти1.5
(В Ubuntu 14,15)Используйте этот сценарий для установки последней версии https://github.com/gp187/nginx-builder/blob/master/fix/aclocal.sh
источник
2017 - Высокая Сьерра
Действительно сложно заставить autoconf 1.15 работать на Mac. Мы наняли эксперта, чтобы все заработало. Все прекрасно заработало.
Позже мне довелось обновить Mac до High Sierra.
Конвейер Docker перестал работать!
Несмотря на то, Autoconf 1,15 это работает отлично на Mac.
Как исправить,
Короткий ответ: я просто выбил локальное репо и снова проверил репо.
Это предложение отмечено в миксе на этой странице контроля качества и в других местах.
Тогда все работало нормально!
Вероятно, это как-то связано с aclocal.m4 и аналогичными файлами. . (Но кто знает на самом деле). Я бесконечно массировал эти файлы ... но ничего.
По какой-то неизвестной причине, если вы просто поцарапаете свое репо и снова получите репо: все работает!
Я часами пробовал каждую комбинацию касания / удаления и т.д. рассматриваемых файлов, но нет. Просто проверьте репо с нуля!
источник