정의되지 않은 매크로 : 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.