muhtemelen tanımlanmamış makro: AC_MSG_ERROR


113

Configure.ac içinde aşağıdakilere sahibim:

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

Bu uzun zamandır projemizde yer alıyor, ancak bazı kurulumlarda şu hatayı alıyorum:

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.

Bunun üzerine yeni eklenen satırlar:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Bu hataya neyin sebep olduğunu ve sorunun nasıl tespit edileceğini kimse açıklayabilir mi?

DÜZENLEME: Farklılıklar hakkında ayrıntılar ekleniyor .

Çalışan kutu:

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

Çalışmayan kutu:

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

YENİ DÜZENLEME: sadece 32 bit makineler bu zorluğu yaşar.

Updated Birlikte bir CentOS makinedeki sorunu yeniden mümkün duyuyorum autoconf 2.67, automake 1.11.1, libtool 2.2.6b, ve m4 1.4.14. Bu sadece 32 bit makinelerde bir hata mı?


Bu neden bir problem? Tarball'larınızı autoconf 2.67 ile oluşturun. Tek bir makineye autoconf'un kurulu olması yeterlidir!
William Pursell

1
Sorunu kolayca çözebileceğimin farkındayım, bunun configure.ac veya diğer yapılandırma dosyalarımızdaki bir sorun değil, tek kutuda bir sorun olduğundan emin olmaya çalışıyorum.
dbeer

Autoconf 2.64'ün oldukça hatalı olduğunu biliyorum. Muhtemelen 2.65'te bir hata yaşıyorsunuz.
William Pursell

1
Autoconf 2.67, automake 1.11.1, libtool 2.2.6b ve m4 1.4.14 ile başka bir 32-bit makinede sorunu yeniden oluşturabiliyorum
dbeer

1
Bunun yardımcı olacağını düşünemiyorum: ama AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [hata]) denediniz mi? Kesinlikle bir m4 sorunu gibi geliyor ve bir şeyleri m4'e tam olarak alıntı yapmak yalnızca yardımcı olabilir. Bu belirli satır muhtemelen suçlu değil, ancak bir yerde alıntı yapma sorunu gibi kokuyor. Configure.ac dosyasının tamamını gönderebilir misiniz?
William Pursell

Yanıtlar:


257

Aynı sorunu yaşadım ve pkg-configpaketin eksik olduğunu buldum .

Paketi kurduktan sonra her şey doğru şekilde oluşturuldu.


2
Teşekkürler! Aynı ayakkabı giyen bir sonraki adam için davamın ana hatlarını çiziyorum. Yeniden üretilebilir yapılara sahip olmak adına, tüm GNU Derleme Sistemi araçlarına özel yollardan oluşan bir araç zinciri kullanmalıyım. Pkg-config yüklemenin eşdeğeri sadece PATH'i değiştirmek değil, aynı zamanda"-I /toolchain_local/pkg-config-0.23/share/aclocal" için autoreconfkomut. Pkg-config'in sadece ikili dosyalar yüklemediğini anlamam biraz zaman aldı. rpm -ql pkgconfigyardım etti.
Assambar

7
Yüklemem gerekiyordu libtool.
Mitar

11
Bilginize, teknik olarak bu sorunu çözmüyor. Bu durumda, AC_MSG_ERROR"pkg-config'i yüklemeniz gerekiyor" demeye çalışıyordu, ancak bir nedenle bu mesajı yazdıramadı (yaklaşık olarak hata veriyor AC_MSG_ERROR). Yükleyerekpkg-config artık bir hata mesajı yazdırmaya gerek kalmadığı için AC_MSG_ERRORsatır atlandı ve işler yolunda gitti. Başkasının paketini yüklüyorsanız sorun değil, ancak kendi
kodunuzsa

19
Bu sorunla daha önce karşılaştım ve autoconf-archivepaketi yüklemek sorunu çözdü.
jonthalpy

5
Vay canına, bu gerçekten kötü bir hata mesajı veren bir otomatik yeniden yapılandırma örneğidir.
John Greene

31

Aclocal.m4'ü düzgün bir şekilde doldurmak için autoreconf -fimanuel olarak aclocal;autoconf;automake; #and whatever elsearamak yerine kullanılması önerilir .

Ekleme ACLOCAL_AMFLAGS = -I m4(toplevel Makefile.am kadar) ve AC_CONFIG_MACRO_DIR([m4])herhangi bir kendi m4 dosyaları kullanın yoksa şu anda hala isteğe bağlıdır, ama tabii ki, bu proocess susturacaktır yapıyor :)


Bizim için gerekli olan m4 dosyalarımız var. Ayrıca, şeyleri autoreconf -fi olarak değiştirmek aynı hatayı üretir.
dbeer

1
M4 dosyalarınız varsa, ACLOCAL_AMFLAGS ve AC_CONFIG_MACRO_DIR tam olarak yapmanız gereken şeydir. (Ve dosyaları m4 / veya belirttiğiniz
dizine koymak

Teşekkürler, autoreconf -fiPCRE derlemesi yapıldı.
uınbɐɥs

Bu aynı sorun vardı ve ben belirleyerek bunları kaçırmıştı bulundu ACLOCAL_AMFLAGSyılında Makefile.am- teşekkürler!
simpleigh

2
Otomatik aletler çok bozuk ... Bu saçmalıkların hiçbiri mantıklı değil. 30 yıl sonra nasıl olur da işler hala bu kadar bozuk?
jww

27

Bu problemi kendimle yaşadım configure.ac, ancak bu durumda (ve Google'dan buradaki herkesin yararına) bunun nedeni yanlışlıkla alıntı yaptığım için AC_MSG_ERRORbir dize olarak değerlendirilmesiydi:

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

AC_MSG_ERRORMakronun etrafındaki köşeli parantezleri kaldırdığımda işe yaradı:

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

Yüklemeniz gerektiğini söyleyen yorumlar pkg-configveya bazı paketleri eksik. AC_MSG_ERRORİşin gerekiyordu ve "Paketin XYZ yüklemeniz gerekir" gibi size yararlı mesaj verir ancak, çünkü bazı sorunun olduğunuAC_MSG_ERROR iş yapmaz. XYZ paketini kurmak, hatayı kesinlikle ortadan kaldıracaktır, ancak bunun tek nedeni, paket bir kez oradayken, artık bir hata mesajı yazdırmaya gerek kalmamasıdır!

Yani yüklemek pkg-configveya belirli bir paket sorunu atlatır, aslında onu çözmez.


12

benim de benzer bir problemim vardı .. benim çözümüm

apt-get install libcurl4-openssl-dev

(libcurl'u zaten yükledim) en azından benim için çalıştı ..


11

CentOS 7 altında aynı sorunu yaşadım

Olası bir durumda, sorun libcurl-devel( libcurlbu makineye zaten kurulmuştu) kurulumundan sonra kayboldu


6

Otto-de / libvmod-uuid ile RHEL7.5'te de aynı sorunu yaşadım

"Autoconf-archive" paketleri yüklenerek düzeltildi


Powertop v2,31-rc1'i oluşturmak için "autoconf-archive" Debian paketine ihtiyacım vardı.
dileks

3

Yerel bir m4dizin mi oluşturuyorsunuz? Örneğin,

> aclocal -I m4 --install

Bazı paketler glibtoolize, autoheader, autoconf, automake'yi çalıştırmak için bir autogen.shveya initgen.shkabuk komut dosyasıyla birlikte gelir . İşte kullandığım bir autogen.shkomut dosyası:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

DÜZENLE

En ACLOCAL_AMFLAGS = -I m4üst seviyeye eklemeniz gerekebilir Makefile.am.


Autoreconf, Darwin'de uygun libtoolize seçmiyor mu?
William Pursell

Yerel bir 'm4' dizini kuruyorum. Bir yere -I m4 --install ekledim, ancak aynı hatayı alıyorum. Bu benim autogen.sh betiğim: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer, ACLOCAL_AMFLAGSdeğişkeni ekledi mi?
Brett Hale

@WilliamPursell hayır, değil. MacOS, GNU libtool'u 'glibtool' ve Apple tarafından sağlanan libtool'u (bir GNU libtool tarafından beklendiği gibi davranmayan) 'libtool' olarak içerir. Ayrıca libtoolize'nin 'glibtoolize' olarak kurulduğunu unutmayın. Bu, LIBTOOLIZE ve LIBTOOL makrosu belirtilerek geçersiz kılınabilir. Bu autogen örneğinin iyi olmasına rağmen, autoreconf -fi komutunu çalıştırmak ve özellikle yazılım sizin olmadığında önceki çalıştırmadan -I bayrağını tahmin etmesine / kurtarmasına izin vermek genellikle daha iyidir.
LeoTh3o

3

Debian için. Gerekli paketler şunlardır: m4 automake pkg-config libtool


2

Hata autom4te tarafından oluşturulur. İşler doğru ayarlanmışsa, kodun bu hatayı oluşturan kısmı asla 'AC_MSG_ERROR' görmemelidir, çünkü o noktadan önce m4 tarafından genişletilmesi gerekirdi. Hatanın yalnızca "bazı kurulumlarda" olduğunu söylüyorsunuz. Bu kurulumlarda, autoconf kurulumunuzun fubar olmasını öneririm. Muhtemelen uyumsuz bir m4 sürümü yüklüdür.


Autoconf 2.65 ve m4 1.4.13 kullanıyorum. Bunlar uyumlu mu?
dbeer

m4 1.4.13 yeterince yenidir ve muhtemelen sorun değildir. Uyarıyı gördüğünüz düzenlerde görmediğiniz düzeneklerden neyin farklı olduğunu belirleyebilir misiniz?
William Pursell

Bununla ilgili bazı bilgileri soruma ekledim - konuyla ilgili başka bir şey düşünebilir misiniz? Autotools söz konusu olduğunda pek bilgili değilim.
dbeer

Az önce fark ettim - 32 bit makineler zor olanlar gibi görünüyor.
dbeer

2

MacOS X'i kullanma

sudo port install pkgconfig

çözüm buydu!


3
bu cevap güncel değil, bağlantı noktası yerine brew kullanın
xiamx

2

Mac OS X el captain with brew'da şunu deneyin:
brew install pkgconfig

Bu benim için çalıştı.


2

Bu sorunun iki olası nedeni vardır:

  1. yerel olarak yüklenmedi.
    çözüm : libtool'u kurun

    • Ubuntu için: sudo apt-get install libtool
    • Centos için: sudo yum install libtool
  2. LIBTOOL.m4 yolu hatadır.
    çözüm:

    1. kullanmak aclocal --print-ac-diraclocal geçerli yolu kontrol etmek. (Bu olmalı Genellikle var "/ usr / share / aclocal" veya "/ usr / share / aclocal")
    2. Ardından * .m4 dosyalarının olup olmadığını kontrol edin.
    3. Değilse, bu yola karşılık gelen * .m4 dosyalarını cp. (Belki cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/veya cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Umarım yardımcı olur


1

Ubuntu'da da aynı sorunu yaşadım ( error: possibly undefined macro: AC_MSG_ERROR) ancak yukarıdaki cevaplar benim için işe yaramadı. Çözümü burada buldum

Bu hile yaptı:

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

1

Mac'e pkg-config yükledikten sonra sorunum çözüldü (brew install pkg-config)



0

Yerel olarak tanımlanmış bir makro için argümanlarda a'yı unuttuğumda bu bana oldu. Bunu anlamaya çalışmak için saatler harcadım (otomatik araçlarla neredeyse hiç tanışmadım) ...

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

olması gerekirdi

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

Bana bir hata ya da benzeri bir şey vermesi gerekiyor gibi görünüyor, ancak sanırım bir makro işlemci olduğu için sadece söyleneni yapabilir.


0

Bu sefer sadece birkaç saat kaybettim. Benim sonucum:

  • Sürüme ve diğer yerel koşullara bağlı olarak, autoconf, HERHANGİ BİR tanımlanmamış makroyla karşılaştığında AC_MSG_ERROR undefined ile ilgili mesajı yayınlayacaktır. . AC_MSG_ERROR kırmızı bir ringa balığıdır. Tanımsız bir makronun nedenleri şunlar olabilir:
    • Dosyadaki bir makro adında bir yazım hatası veya tarball ile gönderilmemiş yerel bir makro
    • Biri dosyada kullanılan bir dizi autoconf makrosuyla birlikte gelen bir paket eksik. pkg-config genellikle eksik olanıdır (örneğin, PKG_CHECK_MODULES nedeniyle), ancak bu, ihtiyaç duyulan ancak bulunmayan bir makroyu sağlayan başka herhangi bir paket olabilir. Elbette kötü olan şey, bunun henüz mevcut olmayan yapılandırma komut dosyası eksik paketi kontrol etmeden önce gerçekleşmesidir ...

0

Jhbuild ile amtk ve utthpmock oluşturmaya çalışırken benzer sorunlar yaşadım.

Autoconf arşivinin en son sürümünü yüklemem gerekiyordu. Talimatlar https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint adresindedir . sudo make installSonunda bir ek yaptım .

Son adım ACLOCAL_PATH:

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

A'dan sonra source ~/.bashrc, tüm makrolar nihayet bulundu ve yapılar başarılı oldu.


-1

Yeni kurulmuş bir makinede Macports portu "openocd" ile aynı problemi yaşadım (git deposunu kullanmak için yerel olarak Portföyü değiştirdim).

Kalıcı düzeltme kolaydır, Portföyde pkgconfig için bir bağımlılık tanımlayın: bağımlı_lib-append port: pkgconfig

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.