makro yang mungkin tidak ditentukan: AC_MSG_ERROR


113

Saya memiliki yang berikut ini di 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

Ini telah ada dalam proyek kami untuk waktu yang lama, tetapi dalam beberapa pengaturan, saya mendapatkan kesalahan ini:

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.

Garis yang baru saja ditambahkan di atas ini:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Adakah yang bisa menjelaskan apa yang menyebabkan kesalahan ini dan bagaimana melacak masalahnya?

EDIT: Menambahkan detail tentang perbedaannya.

Kotak yang berfungsi:

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

Kotak yang tidak berfungsi:

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

EDIT BARU: hanya mesin 32 bit yang mengalami kesulitan ini.

Updated saya dapat mereproduksi masalah pada mesin CentOS dengan autoconf 2.67, automake 1.11.1, libtool 2.2.6b, dan m4 1.4.14. Apakah ini hanya bug dengan mesin 32-bit?


Mengapa ini menjadi masalah? Bangun tarball Anda dengan autoconf 2.67. Anda hanya perlu menginstal autoconf di satu mesin!
William Pursell

1
Saya sadar saya dapat mengatasi masalah ini dengan mudah, saya hanya mencoba memastikan bahwa ini adalah masalah dengan satu kotak dan bukan masalah di file konfigurasi kami atau config lainnya.
dbeer

Saya tahu bahwa autoconf 2.64 dianggap cukup bermasalah. Mungkin Anda mengalami bug di 2.65.
William Pursell

1
Saya dapat mereproduksi masalah pada mesin 32-bit lain dengan autoconf 2.67, automake 1.11.1, libtool 2.2.6b, dan m4 1.4.14
dbeer

1
Saya tidak dapat membayangkan ini membantu: tetapi apakah Anda sudah mencoba AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Ini pasti terdengar seperti masalah m4, dan mengutip sepenuhnya hal-hal ke m4 hanya dapat membantu. Baris khusus ini mungkin bukan pelakunya, tetapi baunya seperti masalah kutipan di suatu tempat. Dapatkah Anda memposting konfigurasi lengkapnya?
William Pursell

Jawaban:


256

Saya mengalami masalah yang sama dan menemukannya pkg-config paket hilang.

Setelah menginstal paket, semuanya dihasilkan dengan benar.


2
Terima kasih! Menguraikan kasus saya, untuk pria berikutnya dengan sepatu yang sama. Demi mendapatkan build yang dapat direproduksi, saya harus menggunakan toolchain jalur kustom ke semua alat Sistem Build GNU. Setara dengan menginstal pkg-config tidak hanya untuk memodifikasi PATH tetapi juga untuk menambah "-I /toolchain_local/pkg-config-0.23/share/aclocal"baris autoreconfperintah. Perlu beberapa waktu bagi saya untuk menyadari bahwa pkg-config tidak hanya menginstal binari. rpm -ql pkgconfigmembantu.
Assambar

7
Saya harus menginstal libtool.
Mitar

11
FYI secara teknis ini tidak memperbaiki masalah. Dalam hal AC_MSG_ERRORini mencoba untuk mengatakan "Anda perlu menginstal pkg-config" tetapi untuk beberapa alasan tidak dapat mencetak pesan ini (memberikan kesalahan tentang AC_MSG_ERROR). Dengan menginstal pkg-configtidak perlu lagi mencetak pesan kesalahan, jadi AC_MSG_ERRORgaris dilewati dan semuanya bekerja. Baik jika Anda menginstal paket orang lain, tetapi jika itu kode Anda sendiri, Anda masih belum memperbaiki masalah :-)
Malvineous

19
Saya telah mengalami masalah ini sebelumnya, dan menginstal autoconf-archivepaket memperbaiki masalah tersebut.
jonthalpy

5
Wow, ini adalah contoh dari autoreconfig yang mengeluarkan pesan kesalahan yang sangat buruk.
John Greene

31

Sebaiknya gunakan autoreconf -fidaripada memanggil secara manual aclocal;autoconf;automake; #and whatever elseuntuk mengisi aclocal.m4 dan seterusnya dengan benar.

Menambahkan ACLOCAL_AMFLAGS = -I m4(ke Makefile.am tingkat atas) dan AC_CONFIG_MACRO_DIR([m4])saat ini masih opsional jika Anda tidak menggunakan file m4 sendiri, tetapi tentu saja, melakukannya akan membungkam proses :)


Kami memiliki file m4, jadi itu diperlukan untuk kami. Juga, mengubah hal-hal menjadi autoreconf -fi menghasilkan kesalahan yang sama.
dbeer

1
Jika Anda memiliki file m4, ACLOCAL_AMFLAGS dan AC_CONFIG_MACRO_DIR adalah yang harus Anda lakukan. (Dan meletakkan file di m4 /, resp. Dir yang Anda tentukan)
jørgensen

Terima kasih, telah autoreconf -fimembuat kompilasi PCRE.
uınbɐɥs

Aku punya ini masalah yang sama persis dan menemukan bahwa aku merindukan keluar pengaturan ACLOCAL_AMFLAGSdi Makefile.am- terima kasih!
simpleigh

2
Autotools sangat rusak ... Semua omong kosong ini tidak masuk akal. Bagaimana bisa dalam 30 tahun keadaan masih seburuk ini?
jww

27

Saya memiliki masalah ini dengan masalah saya sendiri configure.ac, tetapi dalam kasus ini (dan untuk kepentingan siapa pun di sini dari Google) itu karena saya tidak sengaja mengutipnya AC_MSG_ERRORsehingga diperlakukan sebagai string:

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

Setelah saya menghapus tanda kurung siku di sekitar AC_MSG_ERRORmakro, itu berhasil:

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

Komentar tersebut mengatakan Anda harus menginstal pkg-configatau beberapa paket tidak mengerti maksudnya. Ini AC_MSG_ERRORseharusnya berfungsi dan memberi Anda pesan bermanfaat seperti "Anda perlu menginstal paket XYZ", tetapi karena beberapa masalah, AC_MSG_ERRORtidak berfungsi. Menginstal paket XYZ pasti akan menghilangkan kesalahan, tetapi hanya karena setelah paket ada, tidak perlu lagi mencetak pesan kesalahan!

Jadi menginstal pkg-configatau paket tertentu hanya melewati masalah, itu tidak benar-benar memperbaikinya.


12

saya juga punya masalah serupa .. solusi saya adalah

apt-get install libcurl4-openssl-dev

(saya telah menginstal libcurl) setidaknya bekerja untuk saya ..


11

Saya pernah mengalami masalah yang sama di bawah CentOS 7

Dalam kasus mungkin, masalah hilang setelah instalasi libcurl-devel( libcurlsudah diinstal pada mesin ini)


6

Saya memiliki masalah yang sama di RHEL7.5 dengan otto-de / libvmod-uuid

Ini diperbaiki dengan menginstal paket "autoconf-archive"


Saya membutuhkan paket Debian "autoconf-archive" untuk membangun powertop v2,31-rc1.
dileks

3

Apakah Anda menyiapkan m4direktori ' ' lokal ? misalnya,

> aclocal -I m4 --install

Beberapa paket dilengkapi dengan skrip autogen.shatau initgen.shshell untuk menjalankan glibtoolize, autoheader, autoconf, automake. Berikut autogen.shskrip yang saya gunakan:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

EDIT

Anda mungkin perlu menambahkan ACLOCAL_AMFLAGS = -I m4ke level teratas Makefile.am.


Apakah autoreconf tidak memilih libtoolize yang tepat di Darwin?
William Pursell

Saya sedang menyiapkan direktori 'm4' lokal. Saya menambahkan -I m4 --install ke aclocal, tetapi saya mendapatkan kesalahan yang sama. Ini adalah skrip autogen.sh saya: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@ dbeer, menambahkan ACLOCAL_AMFLAGSvariabel?
Brett Hale

@WilliamPursell tidak, tidak. MacOS menampilkan GNU libtool sebagai 'glibtool', dan yang disediakan oleh Apple (yang tidak berperilaku seperti yang diharapkan oleh GNU libtool) sebagai 'libtool'. Perhatikan bahwa libtoolize juga diinstal sebagai 'glibtoolize'. Ini dapat diganti dengan menetapkan makro LIBTOOLIZE dan LIBTOOL. Meskipun sampel autogen ini bagus, seringkali lebih baik menjalankan autoreconf -fi dan membiarkannya menebak / memulihkan flag -I dari proses sebelumnya, terutama ketika perangkat lunak tersebut bukan milik Anda.
LeoTh3o

3

Untuk Debian. Paket yang dibutuhkan adalah: m4 automake pkg-config libtool


2

Kesalahan dihasilkan oleh autom4te. Jika semuanya sudah diatur dengan benar, bagian dari kode yang menghasilkan kesalahan itu tidak boleh melihat 'AC_MSG_ERROR', karena seharusnya telah diperluas oleh m4 sebelum titik itu. Anda mengatakan kesalahan hanya terjadi "di beberapa penyiapan". Saya menyarankan bahwa dalam pengaturan tersebut, instalasi autoconf Anda adalah fubar. Mungkin Anda menginstal versi m4 yang tidak kompatibel.


Saya menggunakan autoconf 2.65 dan m4 1.4.13. Apakah ini kompatibel?
dbeer

m4 1.4.13 cukup baru dan sepertinya bukan masalahnya. Dapatkah Anda menentukan apa yang berbeda tentang penyiapan di mana Anda melihat peringatan dari yang tidak Anda lihat?
William Pursell

Saya baru saja menambahkan beberapa informasi tentang itu ke pertanyaan saya - dapatkah Anda memikirkan hal lain yang relevan? Aku tidak terlalu paham tentang autotools.
dbeer

Baru saja diperhatikan - mesin 32 bit sepertinya yang mengalami kesulitan.
dbeer

2

Menggunakan MacOS X

sudo port install pkgconfig

adalah solusinya!


3
jawaban ini sudah usang, gunakan brew daripada port
xiamx

2

Di Mac OS X el captain dengan brew, coba:
brew install pkgconfig

Ini berhasil untuk saya.


2

Ada dua kemungkinan alasan untuk masalah itu:

  1. tidak menginstal aclocal.
    solusi: instal libtool

    • Untuk ubuntu: sudo apt-get install libtool
    • Untuk centos: sudo yum install libtool
  2. jalur ke LIBTOOL.m4 adalah kesalahan.
    larutan:

    1. menggunakan aclocal --print-ac-dir untuk memeriksa jalur saat ini ke aclocal. (Biasanya harus "/ usr / share / aclocal" atau "/ usr / share / aclocal")
    2. Kemudian periksa apakah ada file * .m4.
    3. Jika tidak, cp file * .m4 yang sesuai ke jalur ini. (Mungkin cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/atau cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Semoga membantu


1

Saya memiliki masalah yang sama di Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR) tetapi jawaban di atas tidak berhasil untuk saya. Saya menemukan solusinya di sini

Itu berhasil:

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

1

Masalah saya teratasi setelah saya menginstal pkg-config di Mac (brew install pkg-config)


1

Saya menyelesaikan ini dengan yum install libtool


setelah saya selesai mengkompilasi pkg-config
VictorV

0

Ini terjadi pada saya ketika saya lupa a, dalam argumen untuk makro yang ditentukan secara lokal. Menghabiskan waktu berjam-jam mencoba mencari tahu (hampir tidak mengenal autotools) ...

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

seharusnya

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

Sepertinya itu seharusnya memberi saya kesalahan atau semacamnya, tapi saya kira sebagai prosesor makro itu hanya bisa melakukan apa yang diperintahkan.


0

Saya baru saja kehilangan beberapa jam untuk yang satu ini. Kesimpulan saya:

  • Bergantung pada versi dan kondisi lokal lainnya, autoconf akan mengeluarkan pesan tentang AC_MSG_ERROR yang tidak terdefinisi ketika ia menemukan makro yang tidak ditentukan APA PUN . AC_MSG_ERROR adalah ikan haring merah. Penyebab makro yang tidak ditentukan bisa jadi:
    • Kesalahan ketik pada nama makro di file, atau makro lokal yang belum dikirimkan dengan tarball
    • Hilang paket yang akan datang dengan satu set makro konfigurasi otomatis, salah satunya digunakan dalam file. pkg-config sering kali hilang (karena, misalnya, PKG_CHECK_MODULES), tetapi ini bisa berupa paket lain yang menyediakan makro yang diperlukan tetapi tidak ada. Hal yang kejam tentu saja, ini terjadi sebelum skrip konfigurasi yang masih belum ada dapat memeriksa paket yang hilang ...

0

Saya mengalami masalah serupa saat mencoba membangun amtk dan utthpmock dengan jhbuild.

Saya perlu menginstal versi terbaru dari arsip-autoconf. Petunjuknya ada di https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Saya melakukan tambahan sudo make installdi akhir.

Langkah terakhir adalah memperbarui ACLOCAL_PATH:

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

Setelah a source ~/.bashrc, semua makro akhirnya ditemukan dan build berhasil.


-1

Saya memiliki masalah yang sama dengan port Macports "openocd" (Portfile dimodifikasi secara lokal untuk menggunakan repositori git) pada mesin yang baru diinstal.

Perbaikan permanen itu mudah, tentukan ketergantungan ke pkgconfig di Portfile: depend_lib-append port: pkgconfig

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.