“ 'aclocal-1.15'is missing on your system”경고를 극복하는 방법은 무엇입니까?
github에서 C ++ 프로그램을 실행하려고합니다. (다음 링크에서 사용 가능 https://github.com/mortehu/text-classifier )
Mac이 있고 터미널에서 실행하려고합니다. autoconf와 automake를 다운로드 한 것 같지만 확실하지 않습니다. 프로그램을 실행하려면 터미널의 올바른 폴더로 이동 한 다음 실행합니다.
./configure && make
하지만 오류가 발생합니다.
경고 : 시스템에 'aclocal-1.15'가 없습니다. 'acinclude.m4', 'configure.ac'또는 'configure.ac'에 포함 된 m4 파일을 수정 한 경우에만 필요합니다. '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 프로그램을 실행하는 데 필요한 모든 것이 있지만 분명한 것처럼 Im이 무엇을하는지 전혀 모릅니다.
위 링크에서 프로그램을 실행하는 가장 쉽고 간단한 방법은 무엇입니까? readme 및 예제 사용이 함께 제공된다는 것을 알고 있지만 작동하지 않습니다.
실행하기 전에 실행 ./configure
해보십시오 autoreconf -f -i
. autoreconf 프로그램은 필요에 따라 autoheader, aclocal, automake, autopoint 및 libtoolize를 자동으로 실행합니다.
추가 할 편집 : 이는 일반적으로 .zip
또는 .tar.gz
아카이브 에서 코드를 추출하는 대신 Git에서 코드를 체크 아웃하여 발생합니다 . 파일이 변경 될 때 다시 빌드를 트리거하기 위해 Git은 파일의 타임 스탬프를 보존하지 않으므로 configure
스크립트가 오래된 것처럼 보일 수 있습니다. 다른 사람들이 언급했듯이, 충분히 최신 버전이없는 경우이 문제를 해결할 수있는 방법이 있습니다 autoreconf
.
또 다른 편집 : 이 오류는 scp를 사용하여 아카이브에서 추출한 소스 폴더를 다른 컴퓨터로 복사하여 발생할 수도 있습니다. 타임 스탬프를 업데이트하여 재 구축이 필요함을 알릴 수 있습니다. 이를 방지하려면 아카이브를 복사하고 제자리에 추출하십시오.
종종, 당신은 어떤 필요하지 않은 auto*
도구와 간단한 솔루션은 단순히 실행하는 것입니다 touch aclocal.m4 configure
관련 폴더 (및 실행 touch
에를 Makefile.am
하고 Makefile.in
그들이 존재하는 경우). 이렇게하면 타임 스탬프가 업데이트되고 aclocal.m4
시스템이 aclocal.m4
최신 상태이며 다시 빌드 할 필요가 없음을 알립니다 . 그런 다음 build
디렉토리 를 비우고 configure
처음부터 다시 실행하는 것이 가장 좋습니다 . 이 문제가 정기적으로 발생합니다. 저에게 근본 원인은 다른 폴더에서 라이브러리 (예 :에 mpfr
대한 코드 gcc
)를 복사하고 타임 스탬프가 변경 된다는 것 입니다.
물론 수동으로 파일을 변경했기 때문에 이러한 파일을 실제로 재생성해야하는 경우에는이 트릭이 유효하지 않습니다. 하지만 패키지 개발자가 최신 파일을 배포하기를 바랍니다.
물론 설치 automake
하고 싶다면 배포에 적합한 패키지 관리자를 사용하십시오.
automake와 함께 제공되는 aclocal을 설치하십시오.
brew install automake # for Mac
apt-get install automake # for Ubuntu
다시 시도하십시오:
./configure && make
이 특정 사례에 적용되거나 적용되지 않는 일반적인 답변 :
오류 메시지 힌트에서 알 수 있듯이 aclocal-1.15는 aclocal.m4를 생성하는 데 사용 된 파일을 수정 한 경우에만 필요합니다.
이러한 파일 (config.ac 포함)을 수정하지 않으면 aclocal-1.15가 필요하지 않습니다.
필자의 경우 문제는 해당 파일이 수정 된 것이 아니라 configure.ac의 타임 스탬프가 aclocal.m4에 비해 6 분 늦었다는 것이 었습니다.
나는 이유를 알지 못했지만 내 git repo의 깨끗한 클론이 문제를 해결했습니다. 아마도 git에 링크되어 있고 처음에 파일을 생성 한 방법 일 것입니다.
autoconf와 친구들을 다시 실행하는 대신 깨끗한 클론을 얻고 다시 시도합니다 .
누군가 configure.ac를 변경했지만 aclocal.m4를 다시 생성하지 않았을 수도 있습니다.이 경우 실제로 automake와 friends를 다시 실행해야합니다.
Autotools의 요점은 궁극적으로라는 쉘 스크립트로 컴파일되는 신비한 M4 매크로 기반 언어를 제공하는 것 ./configure
입니다. 이 컴파일 된 쉘 스크립트를 소스 코드와 함께 제공 할 수 있으며 해당 스크립트는 환경을 감지하고 빌드 할 프로그램을 준비하기 위해 모든 작업을 수행해야합니다. Autotools는 테스트를 조정하고 해당 셸 스크립트를 새로 고치려는 사람에게만 필요합니다.
GNU This 및 GNU That이 작동하려면 시스템에 설치되어야하는 경우 Autotools의 요점을 무너 뜨립니다. 원래는 프로그램을 다양한 유닉스 시스템으로 포팅하는 것을 단순화하기 위해 고안되었습니다. 생성 된 셸 코드에서 사용하는 구조조차도 ./configure
거의 모든 곳에서 깨진 모든 오래된 셸에서 작동하는지 확인하기 위해 매우 신중하게 선택해야했습니다.
당신이 겪고있는 문제는 Autotools가 무엇을위한 것인지 그리고 최종 ./configure
스크립트 의 역할을 이해하지 못하는 사람들이 고안 한 깨진 Makefile 단계 때문 입니다.
해결 방법으로 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'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의 실제 빌드 단계에는 Auto-stuff가 필요하지 않습니다! 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.
[...]
There we go. As you can see, the CDPATH=
command lines there are where the Auto-stuff was being invoked, where you see the true
commands. These report successful termination, and so it just falls through that junk to do the darned build, which is perfectly configured.
I did make gawk
because there are some subdirectories that get built which fail; the trick has to be repeated for their respective Makefiles.
If you're running into this kind of thing with a pristine, official tarball of the program from its developers, then complain. It should just unpack, ./configure
and make
without you having to patch anything or install any Automake or Autoconf materials.
Ideally, a pull of their Git head should also behave that way.
You can install the version you need easily:
First get source:
$ wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
Unpack it:
$ tar -xzvf automake-1.15.tar.gz
Build and install:
$ cd automake-1.15
$ ./configure --prefix=/opt/aclocal-1.15
$ make
$ sudo mkdir -p /opt
$ sudo make install
Use it:
$ export PATH=/opt/aclocal-1.15/bin:$PATH
$ aclocal --version
aclocal (GNU automake) 1.15
Now when aclocal is called, you get the right version.
2018, yet another solution ...
https://github.com/apereo/mod_auth_cas/issues/97
in some cases simply running
$ autoreconf -f -i
and nothing else .... solves the problem.
You do that in the directory /pcre2-10.30
.
What a nightmare.
(This usually did not solve the problem in 2017, but now usually does seem to solve the problem - they fixed something. Also, it seems your Dockerfile should now usually start with "FROM ibmcom/swift-ubuntu" ; previously you had to give a certain version/dev-build to make it work.)
I think the touch command is the right answer e.g. do something like
touch --date="`date`" aclocal.m4 Makefile.am configure Makefile.in
before [./configure && make].
Sidebar I: Otherwise, I agree with @kaz: adding dependencies for aclocal.m4 and/or configure and/or Makefile.am and/or Makefile.in makes assumptions about the target system that may be invalid. Specifically, those assumptions are
1) that all target systems have autotools,
2) that all target systems have the same version of autotools (e.g. automake.1.15 in this case).
3) that if either (1) or (2) are not true for any user, that the user is extracting the package from a maintainer-produced TAR or ZIP format that maintains timestamps of the relevant files, in which case all autotool/configure/Makefile.am/Makefile.in dependencies in the configure-generated Makefile will be satisfied before the make command is issued.
The second assumption fails on many Mac systems because automake.1.14 is the "latest" for OSX (at least that is what I see in MacPorts, and apparently the same is true for brew).
The third assumption fails spectacularly in a world with Github. This failure is an example of an "everyone thinks they are normative" mindset; specifically, the maintainers, who are the only class of users that should need to edit Makefile.am, have now put everyone into that class.
Perhaps there is an option in autowhatever that keeps these dependencies from being added to Makefile.in and/or Makefile.
Sidebar II [Why @kaz is right]: of course it is obvious, to me and other cognoscenti, to simply try a sequence of [touch] commands to fool the configure-created Makefile from re-running configure and the autotools. But that is not the point of configure; the point of configure is to ensure as many users on as many different systems as as possible can simply do [./configure && make] and move on; most users are not interested in "shaving the yak" e.g. debugging faulty assumptions of the autotools developers.
Sidebar III: it could be argued that ./configure, now that autotools adds these dependencies, is the wrong build tool to use with Github-distributed packages.
Sidebar IV: perhaps configure-based Github repos should put the necessary touch command into their readme, e.g. https://github.com/drbitboy/Tycho2_SQLite_RTree.
The problem is not automake
package, is the repository
sudo apt-get install automake
Installs version aclocal-1.4
, that's why you can't find 1.5
(In Ubuntu 14,15)
Use this script to install latest https://github.com/gp187/nginx-builder/blob/master/fix/aclocal.sh
2017 - High Sierra
It is really hard to get autoconf 1.15 working on Mac. We hired an expert to get it working. Everything worked beautifully.
Later I happened to upgrade a Mac to High Sierra.
The Docker pipeline stopped working!
Even though autoconf 1.15 is working fine on the Mac.
How to fix,
Short answer, I simply trashed the local repo, and checked out the repo again.
This suggestion is noted in the mix on this QA page and elsewhere.
It then worked fine!
It likely has something to do with the aclocal.m4 and similar files. (But who knows really). I endlessly massaged those files ... but nothing.
For some unknown reason if you just scratch your repo and get the repo again: everything works!
I tried for hours every combo of touching/deleting etc etc the files in question, but no. Just check out the repo from scratch!
'code' 카테고리의 다른 글
2048KB의 SQLite Android 데이터베이스 커서 창 할당 실패 (0) | 2020.11.16 |
---|---|
Android에서 파일 경로를 Uri로 변환 (0) | 2020.11.16 |
웹 브라우저 구축을 시작하는 방법은 무엇입니까? (0) | 2020.11.16 |
Java의 문자열 풀이 란 무엇입니까? (0) | 2020.11.16 |
모든 유니 코드의 열기 / 닫기 대괄호 목록? (0) | 2020.11.16 |