未定義の可能性があるマクロ: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.67automake 1.11.1libtool 2.2.6b、とm4 1.4.14。これは32ビットマシンのバグですか?


なぜこれが問題なのですか?autoconf 2.67でtarballをビルドします。autoconfを1台のマシンにインストールするだけです!
ウィリアムパーセル2012年

1
私は問題を簡単に回避できることを知っています。私は、それがconfigure.acまたは他の構成ファイルの問題ではなく、1つのボックスの問題であることを確認しようとしているだけです。
dbeer 2012年

autoconf 2.64はかなりバグが多いと考えられていました。おそらく2.65のバグが発生しています。
William Pursell 2012年

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を投稿できますか?
ウィリアムパーセル

回答:


256

これと同じ問題があり、pkg-configパッケージが欠落していることがわかりました。

パッケージをインストールした後、すべてが正しく生成されました。


2
ありがとう!同じ靴の次の男のために、私のケースの概要を説明します。再現可能なビルドを作成するために、すべてのGNU Build Systemツールへのカスタムパスのツールチェーンを使用する必要があります。pkg-configのインストールと同等のことは、PATHを変更するだけでなく"-I /toolchain_local/pkg-config-0.23/share/aclocal"autoreconfコマンドラインに追加することでもありました。pkg-configはバイナリのみをインストールするわけではないことを理解するのに少し時間がかかりました。rpm -ql pkgconfig助けた。
アッサンバー14

7
インストールしなければならなかったlibtool
Mitar

11
ちょうど技術的にこれは問題を解決していません。この場合、AC_MSG_ERRORは「pkg-configをインストールする必要があります」と言っていましたが、何らかの理由でこのメッセージを出力できませんでした(に関するエラーが発生しますAC_MSG_ERROR)。インストールするpkg-configことで、エラーメッセージを出力する必要がなくなったため、そのAC_MSG_ERROR行はスキップされ、機能しました。他の誰かのパッケージをインストールしている場合は問題ありませんが、それが独自のコードである場合は、まだ問題を修正していません:-)
Malvineous

19
以前にこの問題に遭遇したことがあり、autoconf-archiveパッケージをインストールすると問題が解決しました。
jonthalpy 2017年

5
うわー、これは本当に悪いエラーメッセージを吐き出すautoreconfigの例です。
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 /、RESP内のファイルを入れて、あなたが指定したディレクトリを。)
ヨルゲンセン

ありがとう、autoreconf -fiPCREをコンパイルしました。
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-devellibcurlこのマシンにはすでにインストールされています)のインストール後に問題が発生しました


6

RHEL7.5でotto-de / libvmod-uuidを使用して同じ問題が発生しました

「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はダーウィンで適切なlibtoolizeを選択しませんか?
ウィリアムパーセル

ローカルの「m4」ディレクトリを設定しています。aclocalに-I m4 --installを追加しましたが、同じエラーが発生します。これは私のautogen.shスクリプトです:libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --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 2013

3

Debianの場合。必要なパッケージは次のとおりです。m4automake pkg-config libtool


2

エラーはautom4teによって生成されます。正しく設定されていれば、そのエラーを生成するコードの部分は、「AC_MSG_ERROR」を表示することはありません。これは、そのポイントの前にm4によって展開されているはずだからです。あなたは、エラーが「いくつかのセットアップで」だけ起こると言います。これらの設定では、autoconfのインストールがfubarであることをお勧めします。互換性のないバージョンのm4がインストールされている可能性があります。


autoconf 2.65とm4 1.4.13を使用しています。これらは互換性がありますか?
dbeer

m4 1.4.13は十分に新しく、問題ではない可能性があります。警告が表示される設定と表示されない設定の違いを判断できますか?
ウィリアムパーセル

質問にいくつかの情報を追加しました-他に関連することはありますか?autotoolsに関しては、あまり知識がありません。
dbeer

たった今気づいた-32ビットのマシンは問題のあるマシンのようです。
dbeer


2

Mac OS X el captain with brew、try:
brew install pkgconfig

これでうまくいきました。


2

この問題には2つの理由が考えられます。

  1. aclocalをインストールしませんでした。
    ソリューション:libtoolのインストール

    • ubuntuの場合: 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. そうでない場合、CPはこのパスに* .m4ファイルを対応する。(たぶん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

私はこれを解決しました yum install libtool


pkg-configのコンパイルが完了した後
VictorV

0

これは、ローカルで定義されたマクロの引数で、を忘れたときに起こりました。それを理解しようとするのに費やされた時間(autotoolsにほとんど精通していない)...

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

になるはずだった

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

それは私にエラーなどを与えるべきだったようですが、私はマクロプロセッサであることは、それが言ったことだけを行うことができると思います。


0

私はこれで数時間を失った。私の結論:

  • バージョンおよびその他のローカル条件に応じて、autoconfは、未定義のマクロを検出すると、AC_MSG_ERROR undefinedに関するメッセージを出力します。AC_MSG_ERRORは赤いニシンです。未定義のマクロの原因は次のとおりです。
    • ファイル内のマクロ名のタイプミス、またはtarballに同梱されていないローカルマクロ
    • autoconfマクロのセットが付属しているパッケージがありません。そのうちの1つがファイルで使用されています。pkg-configは多くの場合(たとえば、PKG_CHECK_MODULESが原因で)不足しているものですが、これは、必要だが存在しないマクロを提供する他のパッケージである可能性があります。もちろん悪質なことは、まだ存在しないconfigureスクリプトが不足しているパッケージをチェックする前にこれが発生することです...

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-appendport:pkgconfig

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.