정의되지 않은 매크로 : AC_MSG_ERROR


113

configure.ac에 다음이 있습니다.

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

이것은 오랫동안 우리 프로젝트에 있었지만 일부 설정에서는 다음 오류가 발생합니다.

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.

이 위에 최근 추가 된 줄 :

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

누구든지이 오류의 원인과 문제를 추적하는 방법을 설명 할 수 있습니까?

편집 : 차이점에 대한 세부 정보 추가.

작동하는 상자 :

uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

automake: 1.11.1
autoconf: 2.67
m4: 1.4.14
libtoolize: 2.2.6b

작동하지 않는 상자 :

Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC 2011 i686 GNU/Linux

automake: 1.11.1
autoconf: 2.65
m4: 1.4.13
libtoolize: 2.2.6b

새로운 편집 : 32 비트 머신 만이이 어려움을 경험합니다.

업데이트 내가 가진 CentOS는 컴퓨터에 문제를 재현 할 수 있어요 autoconf 2.67, automake 1.11.1, libtool 2.2.6b,와 m4 1.4.14. 32 비트 컴퓨터의 버그입니까?


이것이 왜 문제입니까? autoconf 2.67로 tarball을 빌드하십시오. 하나의 컴퓨터에만 autoconf를 설치하면됩니다!
— William Pursell

1
문제를 쉽게 해결할 수 있다는 것을 알고 있습니다. 저는 단지 하나의 상자에 문제가 있는지 확인하고 configure.ac 또는 다른 구성 파일의 문제가 아닌지 확인하려고합니다.
— dbeer

나는 autoconf 2.64가 상당히 버그가있는 것으로 간주되었다는 것을 알고 있습니다. 2.65에서 버그가 발생했을 수 있습니다.
— William Pursell

1
autoconf 2.67, automake 1.11.1, libtool 2.2.6b 및 m4 1.4.14를 사용하는 다른 32 비트 시스템에서 문제를 재현 할 수 있습니다
— dbeer

1
이 도움을 상상할 수는 없지만 AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? 확실히 m4 문제처럼 들리며 m4에 대해 완전히 인용하면 도움이 될 수 있습니다. 이 특정 줄은 아마도 범인은 아니지만 어딘가에서 인용 문제처럼 냄새가납니다. 전체 configure.ac를 게시 할 수 있습니까?
— William Pursell 2012 년

답변:


256

나는 이와 동일한 문제가 있었고 pkg-config패키지가 없다는 것을 알았 습니다.

패키지를 설치 한 후 모든 것이 올바르게 생성되었습니다.


2
감사! 같은 신발을 신은 다음 남자를 위해 내 사건을 요약합니다. 재현 가능한 빌드를 얻기 위해 모든 GNU 빌드 시스템 도구에 대한 사용자 지정 경로의 도구 모음을 사용해야합니다. pkg-config를 설치하는 것과 동일한 것은 PATH를 수정하는 것뿐만 아니라 명령 줄 에 추가 "-I /toolchain_local/pkg-config-0.23/share/aclocal"하는 것 autoreconf입니다. pkg-config가 바이너리 만 설치하지 않는다는 사실을 깨달았습니다. rpm -ql pkgconfig도움이되었습니다.
— Assambar 2014

7
나는 설치해야했다 libtool.
— Mitar

11
기술적으로 이것은 문제를 해결하지 않습니다. 이 경우는 AC_MSG_ERROR"pkg-config를 설치해야합니다"라고 말하려고했지만 어떤 이유로이 메시지를 인쇄 할 수 없습니다 (에 대한 오류 제공 AC_MSG_ERROR). 설치 pkg-config하면 더 이상 오류 메시지를 인쇄 할 필요가 없으므로 AC_MSG_ERROR줄을 건너 뛰고 모든 것이 작동합니다. :-) 미세 당신이 설치하는 경우 다른 사람이 패키지, 그러나 그것은 자신의 코드를 있다면, 당신은 여전히 문제가 해결되지 않은
— Malvineous

19
이전에이 문제가 발생했으며 autoconf-archive패키지를 설치 하면 문제가 해결되었습니다.
— jonthalpy

5
와우, 이것은 정말 나쁜 오류 메시지를 뱉어내는 자동 재구성의 예입니다.
— John Greene

31

aclocal.m4 등을 올바르게 채우기 위해 autoreconf -fi수동으로 호출 하는 대신 사용 하는 것이 좋습니다 aclocal;autoconf;automake; #and whatever else.

ACLOCAL_AMFLAGS = -I m4(최상위 Makefile.am에) 추가 AC_CONFIG_MACRO_DIR([m4])하고 자신의 m4 파일을 사용하지 않는 경우 현재 여전히 선택 사항이지만 물론 그렇게하면 프로세스가 침묵합니다 :)


우리는 m4 파일을 가지고 있으므로 우리에게 필요합니다. 또한 autoreconf -fi로 변경하면 동일한 오류가 발생합니다.
— dbeer

1
m4 파일이있는 경우 ACLOCAL_AMFLAGS 및 AC_CONFIG_MACRO_DIR이 정확히 수행해야하는 작업입니다. (. 그리고 / 당신이 지정한 인공 호흡기 디렉터리 M4의 파일을 넣어)
— 요르겐 센

감사합니다 autoreconf -fi. PCRE를 컴파일했습니다.
— uınbɐɥs

나는 똑같은 문제가 있었고 내가 설정 ACLOCAL_AMFLAGS을 놓쳤다는 것을 알았습니다 Makefile.am-감사합니다!
— simpleigh 2014 년

2
Autotools가 너무 망가 져서 ...이 쓰레기 중 어느 것도 말이되지 않습니다. 어떻게 30 년이 지난 지금도 이렇게 부서진 것일까 요?
— jww

27

나는 내 자신 에이 문제가 configure.ac있었지만이 경우 (그리고 여기 Google의 누구에게나 이익을 위해) 실수로을 인용했기 때문에 AC_MSG_ERROR문자열로 취급되었습니다.

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])

AC_MSG_ERROR매크로 주변의 대괄호를 제거하면 다음 과 같이 작동합니다.

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))

설치해야한다는 의견 pkg-config이나 일부 패키지에는 요점이 없습니다. 은 AC_MSG_ERROR일에 생각하고 "당신은 패키지 XYZ를 설치해야합니다"와 같은 당신에게 도움이되는 메시지를 제공하지만, 때문에 일부 문제의입니다 AC_MSG_ERROR작동하지 않습니다. 패키지 XYZ를 설치하면 확실히 오류가 사라지지만 패키지가 있으면 더 이상 오류 메시지를 인쇄 할 필요가 없기 때문입니다!

따라서 설치 pkg-config또는 특정 패키지는 문제를 우회 할뿐 실제로 문제를 해결하지는 않습니다.


12

나는 또한 비슷한 문제가 있었다 .. 내 해결책은

apt-get install libcurl4-openssl-dev

(나는 libcurl이 모두 설치되어 있었다) 적어도 나를 위해 일했다 ..


11

CentOS 7에서 이와 동일한 문제가 발생했습니다.

경우에 따라 libcurl-devel( libcurl이 시스템에 이미 설치되어 있음) 설치 후 문제가 발생했습니다.


6

otto-de / libvmod-uuid를 사용하여 RHEL7.5에서 동일한 문제가 발생했습니다.

"autoconf-archive"패키지를 설치하여 수정되었습니다.


powertop v2,31-rc1을 빌드하려면 "autoconf-archive"Debian 패키지가 필요했습니다.
— dileks

3

로컬 ' m4'디렉토리 를 설정하고 있습니까? 예 :

> aclocal -I m4 --install

일부 패키지는 glibtoolize, autoheader, autoconf, automake를 실행하기 위한 autogen.sh또는 initgen.sh쉘 스크립트 와 함께 제공됩니다 . autogen.sh내가 사용 하는 스크립트 는 다음과 같습니다 .

#! /bin/sh

case `uname` in Darwin*) glibtoolize --copy ;;
  *) libtoolize --copy ;; esac

autoheader
aclocal -I m4 --install
autoconf

automake --foreign --add-missing --force-missing --copy

편집하다

ACLOCAL_AMFLAGS = -I m4최상위 에 추가해야 할 수 있습니다 Makefile.am.


autoreconf가 Darwin에서 적절한 libtoolize를 선택하지 않습니까?
— William Pursell

로컬 'm4'디렉토리를 설정하고 있습니다. -I m4 --install을 aclocal에 추가했지만 동일한 오류가 발생합니다. 이것은 내 autogen.sh 스크립트입니다 libtoolize -c -f autoheader -f aclocal을 -I M4 --install autoconf를 -f automake를 --foreign --add-없는 --force-없는 --copy
— dbeer

1
@dbeer, ACLOCAL_AMFLAGS변수 추가 ?
— Brett Hale

@WilliamPursell 아니, 그렇지 않습니다. MacOS는 GNU libtool을 'glibtool'로, Apple에서 제공하는 것 (GNU libtool이 예상 한대로 동작하지 않음)을 'libtool'로 제공합니다. libtoolize도 'glibtoolize'로 설치됩니다. LIBTOOLIZE 및 LIBTOOL 매크로를 지정하여 무시할 수 있습니다. 이 autogen 샘플이 좋지만 autoreconf -fi를 실행하고 이전 실행에서 -I 플래그를 추측 / 복구하도록하는 것이 더 좋습니다. 특히 소프트웨어가 귀하의 것이 아닐 때 더욱 그렇습니다.
— LeoTh3o

3

데비안의 경우. 필수 패키지는 다음과 같습니다. m4 automake pkg-config libtool


2

autom4te에 의해 오류가 생성됩니다. 올바르게 설정되면 해당 오류를 생성하는 코드 부분에 'AC_MSG_ERROR'가 표시되지 않아야합니다. 해당 지점 이전에 m4만큼 확장 되었어야하기 때문입니다. 오류는 "일부 설정에서만"발생한다고 말합니다. 이 설정에서 autoconf 설치가 fubar라고 제안합니다. 호환되지 않는 m4 버전이 설치되어있을 수 있습니다.


나는 autoconf 2.65 및 m4 1.4.13에 있습니다. 호환 되나요?
— dbeer

m4 1.4.13은 충분히 새롭고 문제가 될 가능성이 없습니다. 경고가 표시되는 설정과 그렇지 않은 설정의 차이점을 확인할 수 있습니까?
— William Pursell

제 질문에 그것에 대한 정보 중 일부를 추가했습니다. 다른 관련성이 있다고 생각할 수 있습니까? autotools에 관해서는 잘 모릅니다.
— dbeer

방금 알아 챘습니다. 32 비트 머신이 어려움을 겪고있는 것 같습니다.
— dbeer

2

MacOS X 사용

sudo port install pkgconfig

해결책이었습니다!


3
이 답변은 구식입니다. port 대신 brew를 사용하십시오
— xiamx

2

brew를 사용하는 Mac OS X el captain에서 다음을 시도하십시오.
brew install pkgconfig

이것은 나를 위해 일했습니다.


2

이 문제에는 두 가지 가능한 이유가 있습니다.

  1. aclocal을 설치하지 않았습니다.
    해결책 : libtool 설치

    • 우분투의 경우 : sudo apt-get install libtool
    • centos의 경우 : sudo yum install libtool
  2. LIBTOOL.m4의 경로가 오류입니다.
    해결책:

    1. aclocal --print-ac-diraclocal에 대한 현재 경로를 확인 하는 데 사용 합니다 (일반적으로 "/ usr / share / aclocal"또는 "/ usr / share / aclocal"이어야 함).
    2. 그런 다음 * .m4 파일이 있는지 확인하십시오.
    3. 그렇지 않은 경우이 경로에 해당하는 * .m4 파일을 cp. (어쩌면 cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/또는 cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

도움이되기를 바랍니다.


1

Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR) 에서 동일한 문제가 있었지만 위의 답변이 저에게 효과적이지 않았습니다. 여기 에서 해결책을 찾았습니다 .

그게 트릭이었습니다.

$ LANG=C LC_CTYPE=C ./autogen.sh

1

Mac에 pkg-config를 설치 한 후 문제가 해결되었습니다 (brew install pkg-config).



0

이것은 로컬로 정의 된 매크로에 대한 인수에서를 잊었을 때 발생했습니다. 알아 내려고 몇 시간을 보냈습니다 (자동 도구에 거의 익숙하지 않음) ...

AC_CHECK_MACRO([Foo]
    AC_LOCAL_DO([......

그랬어 야 했어

AC_CHECK_MACRO([Foo],      # <-- Notice comma, doh!
    AC_LOCAL_DO([......

나에게 오류 등을 주었어야하는 것처럼 보이지만 매크로 프로세서라면 말한 대로만 수행 할 수 있다고 생각합니다.


0

이걸로 몇 시간을 잃었습니다. 내 결론 :

  • 버전 및 기타 지역 조건에 따라 autoconf는 정의되지 않은 매크로 가 발생하면 정의되지 않은 AC_MSG_ERROR에 대한 메시지를 뱉어냅니다 . AC_MSG_ERROR는 붉은 청어입니다. 정의되지 않은 매크로의 원인은 다음과 같습니다.
    • 파일에있는 매크로 이름의 오타 또는 tarball과 함께 제공되지 않은 로컬 매크로
    • autoconf 매크로 세트와 함께 제공되는 패키지가 누락되었으며 그중 하나는 파일에서 사용됩니다. pkg-config는 종종 누락 된 항목이지만 (예 : PKG_CHECK_MODULES로 인해) 필요하지만없는 매크로를 제공하는 다른 패키지 일 수 있습니다. 물론 악의적 인 것은 아직 존재하지 않는 구성 스크립트가 누락 된 패키지를 확인할 수 있기 전에 이런 일이 발생한다는 것입니다.

0

jhbuild로 amtk 및 utthpmock을 빌드하려고 할 때 비슷한 문제가 발생했습니다.

최신 버전의 autoconf-archive를 설치해야했습니다. 지침은 https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint에 있습니다. 나는 sudo make install마지막에 추가 했다.

마지막 단계는 내 ACLOCAL_PATH:

echo 'export ACLOCAL_PATH=$ACLOCAL_PATH:/usr/local/share/aclocal' >> ~/.bashrc

이후 source ~/.bashrc모든 매크로가 마침내 발견되었고 빌드가 성공했습니다.


-1

새로 설치된 컴퓨터에서 Macports 포트 "openocd"(로컬에서 git 저장소를 사용하도록 Portfile을 수정)와 동일한 문제가 발생했습니다.

영구적 인 수정은 간단합니다. Portfile에서 pkgconfig에 대한 종속성을 정의하십시오. depends_lib-append port : pkgconfig

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.