" 'aclocal-1.15'is missing on your system"경고를 극복하는 방법은 무엇입니까?


82

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 및 예제 사용법이 함께 제공된다는 것을 알고 있지만 작동하지 않습니다.



1
"모든 일이 프로그램 c를 실행하는 데 필요한"- 당신이하는 모든 일을 필요로 컴파일 이 경우 패키지를 포함하는 프로그램을, automake, autoconf, m4,과 perl메시지가 아주 명확하게 진술로 ... "내가 생각하는 내가 다운로드 한 autoconf를 automake하지만 확실하지 않습니다. "- 적어도 제대로 설치 하지 않았을 것입니다. ;-)
DevSolar 2010 년

답변:


161

실행하기 전에 실행 ./configure해보십시오 autoreconf -f -i. autoreconf 프로그램은 필요에 따라 autoheader, aclocal, automake, autopoint 및 libtoolize를 자동으로 실행합니다.

추가 할 편집 : 이는 일반적으로 .zip또는 .tar.gz아카이브 에서 코드를 추출하는 대신 Git에서 코드를 체크 아웃하여 발생합니다 . 파일이 변경 될 때 다시 빌드를 트리거하기 위해 Git은 파일의 타임 스탬프를 보존하지 않으므로 configure스크립트가 오래된 것처럼 보일 수 있습니다. 다른 사람들이 언급했듯이, 충분히 최신 버전이없는 경우이 문제를 해결할 수있는 방법이 있습니다 autoreconf.

또 다른 편집 : 이 오류는 scp를 사용하여 아카이브에서 추출한 소스 폴더를 다른 컴퓨터로 복사하여 발생할 수도 있습니다. 타임 스탬프를 업데이트하여 재 구축이 필요함을 알릴 수 있습니다. 이를 방지하려면 아카이브를 복사하고 제자리에 추출하십시오.


감사합니다 Mortehu! 하지만 다음 오류가 발생합니다 : In file included from base / columnfile.cc : 1 : ./base/columnfile.h:8:10 : fatal error : 'kj / debug.h'file not found #include <kj / debug .h> 파일이 누락 되었습니까?
Liam Flynn

1
예, Cap'n Proto 프로젝트의 일부인 libkj가 누락되었습니다. libsnappy도 필요합니다.
mortehu

좋아, 마침내 구성, 제작 및 설치에 필요한 모든 도구가 있습니다. 모두 작동하는 것처럼 보이지만 실행 파일은 어디로 이동합니까? 이것이 중요하거나 관련이 있는지 확실하지 않지만 install을 할 때 다음 메시지 (훨씬 큰 메시지의 일부로)가 나타납니다. # 대상이 아닙니다 : install : # 명령 줄 대상. # 암시 적 규칙 검색이 수행되지 않았습니다. # 수정 시간을 확인하지 않았습니다. # 파일이 업데이트되지 않았습니다. 이것은 출력 파일이 생성되지 않음을 의미합니까?
Liam Flynn

프로그램은 tools/text-classifier/text-classifier. 왜 make install작동 하지 않는지 모르겠습니다 .
mortehu

프로젝트에서 다음 업데이트 ./configure를 실행하면이 발생할 수 automake패키지
알렉 이스 토민

52

종종, 당신은 어떤 필요하지 않은 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 

그런 다음 다음과 같은 메시지가 표시됩니다. configure.ac:25 : 오류 : Autoconf 버전 2.69 이상이 필요합니다 ... 경고 : 'aclocal-1.15'가 너무 오래되었을 수 있습니다. ... make : *** [aclocal.m4] 오류 63
Liam Flynn

그런 다음 autoconf v2.69를 설치하면 libtool : 버전 불일치 오류가 발생합니다. 이것은 libtool 2.4.2 Debian-2.4.2-1.11이지만 libtool :이 LT_INIT의 정의는 libtool 2.4.4에서 가져 왔습니다. libtool : libtool 2.4.2 Debian-2.4.2-1.11 libtool :의 매크로를 사용하여 aclocal.m4를 다시 만들고 autoconf를 다시 실행해야합니다.
Liam Flynn

완료했는지 확인하고 brew install libtool실행 aclocal한 다음 실행하십시오 autoconf.
emlai

libtool을 업데이트했지만 이제 libtool : Version mismatch error가 발생합니다. 이것은 libtool 2.4.2 Debian-2.4.2-1.11이지만 libtool :이 LT_INIT의 정의는 libtool 2.4.6에서 가져 왔습니다. libtool : libtool 2.4.2 Debian-2.4.2-1.11 libtool :의 매크로를 사용하여 aclocal.m4를 다시 만들고 autoconf를 다시 실행해야합니다.
Liam Flynn

이것은 문제를 해결합니다. 그러나 다른 많은 것 (루트 권한, 네트워크 연결, 새 소프트웨어를위한 더 많은 공간 등)이 필요하기 때문에 필요하지 않습니다. 아래 Droopycon의 솔루션은 오류 메시지가 " 'configure.ac'에 포함 된 'acinclude.m4', 'configure.ac'또는 m4 파일을 수정 한 경우에만 필요합니다. .
harihardik

10

필요한 버전을 쉽게 설치할 수 있습니다.

먼저 소스 얻기 :

$ 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"을 설치했습니다. "automake"를 검색하고 버전 11-1을 선택하여 CygWin의 UI 설치 프로그램을 통해 설치했습니다.
justdan23

8

이 특정 사례에 적용되거나 적용되지 않는 일반적인 답변 :

오류 메시지 힌트에서 알 수 있듯이 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를 다시 실행해야합니다.


1
더 적절한 대답. squid에서 제공하는 tar에서 소스 파일을 추출하지 않았기 때문에 비슷한 오류가 발생했습니다. 대신 이미 추출 된 폴더를 복사했는데 파일 복사 순서가 달라서 오류가 발생했습니다. 나는 단순히 tar에서 직접 다시 추출하고 작동하기 시작했습니다. 기회가 주어지면 Droopycon의 솔루션을 적절한 답변으로 표시합니다.
harihardik

훌륭한! rsync타임 스탬프를 유지하지 않고 압축 된 소스 아카이브를 복사하는 대신 한 서버에서 다른 서버로 이미 추출 된 파일을 복사하는 데 사용 했습니다. 대신 소스 아카이브를 복사하고 대상 머신에서 추출했을 때 문제가 발생하지 않았습니다. 감사합니다!
Ben Johnson

실제로 대답은 "신선한 저장소 확인"입니다. 환상적인 답변과 현상금!
Fattie 2011

6

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.
[...]

우리는 거기에 갈. 보시다시피, CDPATH=명령 줄은 Auto-stuff가 호출 된 곳이며, 여기에서 true명령 을 볼 수 있습니다 . 이 보고서는 성공적인 종료를보고하므로 완벽하게 구성된 빌드를 수행하는 것은 그 쓰레기를 통과합니다.

make gawk실패한 일부 하위 디렉토리가 빌드되기 때문에 그렇게했습니다 . 트릭은 각각의 Makefile에 대해 반복되어야합니다.

개발자가 작성한 프로그램의 원시적이고 공식적인 tarball로 이런 종류의 문제를 겪고 있다면 불평하십시오. 그냥 압축을 풀고해야, ./configure그리고 make당신이 어떤 Automake가 나 Autoconf에 자료를 아무것도 패치를 적용하거나 설치하지 않고.

이상적으로는 Git 헤드를 당길 때도 그렇게 작동해야합니다.


Makefile이 깨진 이유는 무엇입니까? emlai의 답변에서 지적했듯이 빌드 시스템은 생성 된 파일에 대한 종속성이 오래되었음을 인식합니다 (이는 파일을 수정하여 수정할 수있는 망가진 타임 스탬프의 경우 일 수 있음 touch). 이 시스템을 만든 사람들이 그것이 무엇을 위해 만들어 졌는지 이해하지 못한다고 말하고 ( 변경된 경우 -parts 를 포함 하여 모든 종속성으로 올바르게 빌드하도록 보장 auto*) Makefile을 효과적으로 변경하여 완전히 수행하지 않습니다. 더 많은 것 같습니다.
Simon Sobisch

@SimonSobisch이 문제가 발생하여 답변을 사용할 수 없습니까?
Kaz

물어봐 주셔서 감사합니다. 아니요, 저는이 문제가 발생하지 않지만 귀하의 게시물을 읽어 보면 "이 오류는 Makefile이 깨졌고 Makefile이 무엇이어야하는지가 아니기 때문에 발생합니다"라는 결론을 볼 수 있습니다. 반면 Makefile이해야 할 일을 정확히 수행하는 동안 (필요한 파일을 다시 빌드합니다. 동일한 규칙에 따라 다시 빌드하려면 개체 파일이 C 소스에서 다시 빌드됩니다. 대부분의 경우 오류는 사람들이 필요한 도구없이 비거리 패키지를 사용하거나 소스의 타임 스탬프가 "저자에게 불만"으로 깨지기 때문에 발생합니다.
Simon Sobisch

나는 거라고 결코 에 도구를 변경하는 것이 좋습니다 없습니다 true. "타임 스탬프 때문에"고장난 부품을 실제로 make --touch고장난 대상에 대해 실행 하는 것이 더 나은 경우 ( make --keep-going사전에 "손상된"부품의 목록을 얻기 위해 실행하려는 경우 ).
Simon Sobisch

@SimonSobisch 훌륭한 제안; 거기에 별도의 답변이 시작된 것 같습니다. 이 경우 도구를 true로 변경하는 것은 해당 도구가 프로그램을 빌드하는 데 필요하지 않고 configure이미 미리 빌드 된 형식으로 제공되는 스크립트 를 다시 빌드하는 데만 필요하다는 사실에 의해 합리적으로 정당화됩니다 . 도구를 실행하려는 시도를 억제하기 위해 타임 스탬프를 터치하면 동일한 효과를 얻을 수 있습니다.
Kaz

4

터치 명령이 정답이라고 생각합니다. 예를 들면 다음과 같습니다.

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

[./configure && make] 전에.

사이드 바 I : 그렇지 않으면 @kaz에 동의합니다. aclocal.m4 및 / 또는 구성 및 / 또는 Makefile.am 및 / 또는 Makefile.in에 대한 종속성 추가는 유효하지 않을 수있는 대상 시스템에 대해 가정합니다. 특히 이러한 가정은 다음과 같습니다.

1) 모든 대상 시스템에 autotools가 있음,

2) 모든 대상 시스템에 동일한 버전의 autotools가 있습니다 (예 :이 경우 automake.1.15).

3) (1) 또는 (2)가 어떤 사용자에게도 해당되지 않는 경우 사용자가 관련 파일의 타임 스탬프를 유지하는 관리자가 제작 한 TAR 또는 ZIP 형식에서 패키지를 추출하고 있음을 의미합니다.이 경우 모든 autotool / configure 구성 생성 Makefile의 /Makefile.am/Makefile.in 종속성 은 make 명령이 실행 되기 전에 충족됩니다 .

두 번째 가정은 많은 Mac 시스템에서 실패합니다. automake.1.14가 OSX의 "최신"이기 때문입니다 (적어도 MacPorts에서 볼 수있는 것과 같고 brew에서도 마찬가지 임).

세 번째 가정은 Github를 사용하는 세계에서 훌륭하게 실패합니다. 이 실패는 "모든 사람이 자신이 규범 적이라고 생각한다"는 사고 방식의 한 예입니다. 특히 Makefile.am을 편집해야하는 유일한 사용자 클래스 인 관리자는 이제 모든 사람 을 해당 클래스에 .

아마도 autowhatever에는 이러한 종속성이 Makefile.in 및 / 또는 Makefile에 추가되지 않도록하는 옵션이있을 수 있습니다.

사이드 바 II [@kaz가 옳은 이유] : 물론 저와 다른 cognoscenti에게는 configure와 autotools를 다시 실행하여 구성 생성 Makefile을 속이기 위해 일련의 [touch] 명령을 시도하는 것이 분명합니다. 그러나 그것은 구성의 요점이 아닙니다. 구성의 요점은 가능한 한 많은 다른 시스템의 많은 사용자가 [./configure && make]를 수행하고 계속 진행할 수 있도록하는 것입니다. 대부분의 사용자는 autotools 개발자의 잘못된 가정을 디버깅하는 것과 같이 "야크 제거"에 관심이 없습니다.

사이드 바 III : 이제 autotools가 이러한 종속성을 추가하므로 ./configure가 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 지금은 일반적으로 "ibmcom / 신속 - 우분투 FROM"로 시작한다 보인다 - 문제를 해결하는 것 같다. 특정 버전 / dev-build가 작동하도록합니다.)



0

2017-하이 시에라

Mac에서 autoconf 1.15를 작동시키는 것은 정말 어렵습니다. 우리는 그것을 작동시키기 위해 전문가를 고용했습니다. 모든 것이 아름답게 작동했습니다.

나중에 Mac을 High Sierra로 업그레이드했습니다.

Docker 파이프 라인이 작동을 멈췄습니다!

autoconf 1.15 Mac에서 잘 작동 하더라도 .

어떻게 고치는 지,

짧은 대답은 간단히 로컬 저장소를 폐기하고 저장소를 다시 확인했습니다.

이 제안은이 QA 페이지와 다른 곳의 믹스에 기록되어 있습니다.

그런 다음 잘 작동했습니다!

aclocal.m4 및 유사한 파일과 관련 이있을 수 있습니다 . (하지만 정말로 아는 사람). 나는 그 파일들을 끝없이 마사지했지만 ...

알 수없는 이유로 리포지토리를 긁고 리포지토리를 다시 가져 오면 모든 것이 작동합니다!

나는 문제의 파일 등을 만지거나 삭제하는 모든 콤보를 몇 시간 동안 시도했지만 아니요. 처음부터 repo를 확인하십시오!


automake repo를 체크 아웃 상태로 되돌리려면 "make distclean"을 할 수 있습니다.
Frederick Ollinger

기술적으로는 git 명령이 아닙니다. ./configure 후에 저장소를 정리하는 것입니다. 그래서 그것은 automake의 일부입니다. 그러나 automake를 사용하는 모든 git 저장소에서 작동합니다.
Frederick Ollinger

gotchya, 그거 좋은 팁 같네요.
Fattie

"Mac에서 autoconf 1.15를 작동시키는 것은 정말 어렵습니다. 우리는 그것을 작동시키기 위해 Ultra-Expert를 고용했습니다 ..." -이것은이 툴체인이 얼마나 망가 졌는지 말해줍니다. 그리고 슬프게도 20 년이 넘는 기간 동안 수정되지 않았습니다. 그것을 고치지 않는 것은 내가 예외로 생각하는 것입니다. 사람들이 그것을 사용할 수 없도록 그것을 깨뜨리는 것은 어떤 목적으로 사용됩니까?
jww
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.