संभवतः अपरिभाषित मैक्रो: AC_MSG_ERROR


113

मुझे config.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-बिट मशीनों के साथ एक बग है?


यह समस्या क्यों है? 2.67 के साथ अपने टारबॉल बनाएं। आपको केवल एक मशीन पर ऑटोकॉनफ़ स्थापित करना होगा!
विलियम पर्ससेल

1
मुझे पता है कि मैं इस मुद्दे के आसपास आसानी से काम कर सकता हूं, मैं बस यह सुनिश्चित करने की कोशिश कर रहा हूं कि यह एक बॉक्स के साथ एक समस्या है और हमारे config.ac या अन्य कॉन्फ़िगरेशन फ़ाइलों में कोई समस्या नहीं है।
dbeer

मुझे पता है कि ऑटोकॉन्फ़ 2.64 को काफी छोटी गाड़ी माना जाता था। संभवतः आप 2.65 में एक बग का अनुभव कर रहे हैं।
विलियम पर्ससेल

1
मैं ऑटोकॉन्फ़ 2.67 के साथ एक और 32-बिट मशीन पर समस्या को पुन: उत्पन्न करने में सक्षम हूं, 1.11.1, कामेच्छा 2.2.6b, और m4 1.4.14
डेबीर

1
मैं इस मदद की कल्पना नहीं कर सकता: लेकिन क्या आपने AC_CHECK_PROGS ([MAKE], [$ MAKE gmake बनाते हैं], [त्रुटि]) की कोशिश की है? यह निश्चित रूप से एक एम 4 मुद्दे की तरह लगता है, और पूरी तरह से एम 4 में चीजों को उद्धृत करना केवल मदद कर सकता है। यह विशेष पंक्ति शायद अपराधी नहीं है, लेकिन यह कहीं न कहीं एक उद्धरण मुद्दे की तरह बदबू आ रही है। आप पूर्ण config.ac पोस्ट कर सकते हैं?
विलियम पर्ससेल

जवाबों:


256

मेरे पास यही मुद्दा था और मैंने पाया कि pkg-configपैकेज गायब था।

पैकेज स्थापित करने के बाद, सब कुछ सही ढंग से उत्पन्न हुआ।


2
धन्यवाद! उसी जूते में अगले आदमी के लिए, मेरे मामले को रेखांकित करते हुए। प्रतिलिपि प्रस्तुत करने योग्य बनाता है की खातिर मैं सभी GNU बिल्ड सिस्टम उपकरण के लिए कस्टम पथ का एक उपकरण का उपयोग किया है। Pkg-config इंस्टॉल करने के बराबर न केवल PATH को संशोधित करने के लिए, बल्कि कमांडलाइन को जोड़ने के "-I /toolchain_local/pkg-config-0.23/share/aclocal"लिए भी था autoreconf। मुझे यह महसूस करने में कुछ समय लगा कि pkg-config केवल बायनेरिज़ स्थापित नहीं करता है। rpm -ql pkgconfigमदद की।
15

7
मुझे स्थापित करना था libtool
मेटर

11
सिर्फ FYI करें तकनीकी रूप से यह समस्या को ठीक नहीं कर रहा है। इस मामले में AC_MSG_ERROR"आपको pkg-config इंस्टॉल करने की आवश्यकता है" कहने की कोशिश कर रहा था, लेकिन किसी कारण से यह संदेश प्रिंट करने में असमर्थ था (त्रुटि के बारे में AC_MSG_ERROR)। स्थापित करने से pkg-configत्रुटि संदेश प्रिंट करने की कोई आवश्यकता नहीं थी, इसलिए AC_MSG_ERRORलाइन को छोड़ दिया गया था और चीजें काम कर रही थीं। यदि आप किसी और के पैकेज को स्थापित कर रहे हैं तो ठीक है, लेकिन अगर यह आपका अपना कोड है, तो भी आपने समस्या को ठीक नहीं किया है :-)
Malvineous

19
मैंने पहले इस समस्या का सामना किया है, और autoconf-archiveपैकेज को स्थापित करने से समस्या ठीक हो गई है।
जोंथली

5
वाह, यह एक बहुत खराब त्रुटि संदेश के बाहर थूकना ऑटोरोकोनिग का एक उदाहरण है।
जॉन ग्रीन

31

इसे autoreconf -fiमैन्युअल रूप aclocal;autoconf;automake; #and whatever elseसे aclocal.m4 और इतने पर ठीक से कॉल करने के बजाय उपयोग करने की सिफारिश की जाती है ।

जोड़ना ACLOCAL_AMFLAGS = -I m4(toplevel Makefile.am) और AC_CONFIG_MACRO_DIR([m4])वर्तमान में अभी भी वैकल्पिक है यदि आप किसी भी m4 फ़ाइलों का उपयोग नहीं करते हैं, लेकिन निश्चित रूप से, यह भविष्यद्वाणी को शांत कर देगा :)


हमारे पास एम 4 फाइलें हैं, इसलिए हमारे लिए यह आवश्यक है। इसके अलावा, autoreconf -fi में चीजें बदलने से वही त्रुटि उत्पन्न होती है।
डबेर २५'१२

1
यदि आपके पास m4 फाइलें हैं, तो ACLOCAL_AMFLAGS और AC_CONFIG_MACRO_DIR ठीक वही है जो आपको करना चाहिए। (और फाइलों को m4 / में डालकर,
सम्मान करें

धन्यवाद, autoreconf -fiपीसीआरई संकलन बनाया।
uınb us

मेरे पास यह वही समस्या थी और मैंने पाया कि मैं सेटिंग ACLOCAL_AMFLAGSमें चूक गया था Makefile.am- धन्यवाद!
सिंपलीज

2
ऑटोटूलस तो टूट गए हैं ... इस बकवास में से कोई भी समझ में नहीं आता है। 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 पर समान समस्या थी

यह "ऑटोकॉन्फ़-आर्काइव" पैकेज स्थापित करके तय किया गया था


मुझे पॉवरटॉप v2,31-rc1 के निर्माण के लिए डेबियन पैकेज "ऑटोकॉन्फ-आर्काइव" की आवश्यकता थी।
जिल

3

क्या आप एक स्थानीय ' m4' निर्देशिका स्थापित कर रहे हैं ? जैसे,

> aclocal -I m4 --install

कुछ पैकेज ग्लिब्टुलाइज़, ऑटोहिएडर, ऑटोकॉनफ़, ऑटोमेक चलाने के लिए एक 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


क्या ऑटोरैकोन डार्विन पर उचित परिवाद का चयन नहीं करता है?
विलियम पर्ससेल

मैं एक स्थानीय 'm4' निर्देशिका स्थापित कर रहा हूं। मैंने जोड़ा -I m4 - aclocal की स्थापना, लेकिन मुझे वही त्रुटि मिलती है। यह मेरी ऑटोजेन है। स्क्रिप्ट: libtoolize -c -f autoheader -f aclocal -I m4 - autoconf -f automake --foreign --add- अनुपलब्ध -फोर्सिंग
लापता-

1
@dbeer, ACLOCAL_AMFLAGSचर जोड़ा ?
ब्रेट हेल

@WilliamPursell नहीं, यह नहीं है। MacOS में GNU libtool को 'glibtool', और Apple द्वारा प्रदान किया गया है (जो GNU libtool द्वारा अपेक्षित व्यवहार नहीं करता है) 'libtool' है। ध्यान दें कि libtoolize को 'glibtoolize' के रूप में भी स्थापित किया जाता है। LIBTOOLIZE और LIBTOOL मैक्रो को निर्दिष्ट करके इसे ओवरराइड किया जा सकता है। इसके बावजूद ऑटोजेन का नमूना अच्छा है, यह अक्सर ऑटोरैकोन-एफआई को चलाने के लिए बेहतर होता है और यह अनुमान लगाते हैं / पिछले ध्वज से -I ध्वज को पुनर्प्राप्त करें, खासकर जब सॉफ्टवेयर आपका नहीं है।
लियोथो 3

3

डेबियन के लिए। आवश्यक पैकेज हैं: m4 स्वचालित pkg-config libtool


2

त्रुटि auto4te द्वारा उत्पन्न होती है। यदि चीजें सही तरीके से स्थापित की जाती हैं, तो कोड का वह हिस्सा जो उस त्रुटि को उत्पन्न करता है, उसे 'AC_MSG_ERROR' कभी नहीं देखना चाहिए, क्योंकि यह उस बिंदु से पहले m4 द्वारा विस्तारित होना चाहिए था। आप कहते हैं कि त्रुटि "कुछ सेटअप में" होती है। मेरा सुझाव है कि उन सेटअपों में, आपका ऑटोकॉफ़ इंस्टॉलेशन फ़ुबर है। संभवतः आपके पास एम 4 का एक असंगत संस्करण स्थापित है।


मैं ऑटोकॉन्फ़ 2.65 और एम 4 1.4.13 पर हूं। क्या ये संगत हैं?
दिलेर

m4 1.4.13 पर्याप्त नया है और इस समस्या की संभावना नहीं है। क्या आप यह निर्धारित कर सकते हैं कि उन सेटअपों के बारे में क्या अलग है जिसमें आप उन लोगों से चेतावनी देखते हैं जिनमें आप नहीं हैं?
विलियम पर्ससेल

मैंने उस पर कुछ जानकारी अपने सवाल में जोड़ी - क्या आप किसी और चीज के बारे में सोच सकते हैं? जब यह ऑटोटॉल्स की बात आती है तो मैं बहुत जानकार नहीं हूं।
dbeer

बस ध्यान दिया गया - 32 बिट मशीनें कठिनाई वाले प्रतीत होते हैं।
dbeer

2

MacOS X का उपयोग करना

sudo port install pkgconfig

समाधान था!


3
यह उत्तर पुराना है, बंदरगाह के बजाय काढ़ा का उपयोग करें
xiamx

2

काढ़ा के साथ मैक ओएस एक्स एल कप्तान पर, कोशिश करें:
काढ़ा पीकेकॉन्फिग स्थापित करें

इसने मेरे लिए काम किया।


2

उस समस्या के दो संभावित कारण हैं:

  1. aclocal स्थापित नहीं किया।
    समाधान : स्थापित करें libtool

    • Ubuntu के लिए: sudo apt-get install libtool
    • सेंटोस के लिए: sudo yum install libtool
  2. LIBTOOL.m4 का मार्ग त्रुटि है।
    उपाय:

    1. उपयोग aclocal --print-ac-diraclocal के लिए वर्तमान पथ की जाँच लिए करें। (यह आमतौर पर "/ usr / शेयर / aclocal" या "/ usr / शेयर / 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

मुझे उबंटू ( error: possibly undefined macro: AC_MSG_ERROR) पर भी यही समस्या थी लेकिन ऊपर दिए गए जवाब मेरे काम नहीं आए। मैं समाधान यहाँ

इसने यह चाल चली:

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



0

यह मेरे साथ तब हुआ जब मैं एक स्थानीय रूप से परिभाषित मैक्रो के तर्कों में भूल गया। बिताए घंटे यह पता लगाने की कोशिश कर रहे हैं (मुश्किल से ऑटोटूल से परिचित) ...

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

होना चाहिये था

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

ऐसा लगता है कि यह मुझे एक त्रुटि या इस तरह दिया जाना चाहिए था, लेकिन मुझे लगता है कि एक मैक्रो प्रोसेसर होने के नाते यह केवल वही कर सकता है जो इसके बताया गया है।


0

मैं इस पर कुछ ही घंटे खो दिया है। मेरा निष्कर्ष:

  • संस्करण और जो भी अन्य स्थानीय परिस्थितियों के आधार पर, ऑटोकॉन्फ़ AC_MSG_ERROR के बारे में संदेश को अपरिभाषित करेगा, जब वह किसी अपरिभाषित मैक्रो से सामना करता है । AC_MSG_ERROR एक लाल हेरिंग है। एक अपरिभाषित मैक्रो के कारण हो सकते हैं:
    • फ़ाइल में एक मैक्रो नाम में एक टाइपो, या एक स्थानीय मैक्रो जिसे टारबॉल के साथ शिप नहीं किया गया है
    • एक पैकेज को मिस करना जो ऑटोकॉन्फ़ मैक्रोज़ के सेट के साथ आया होगा, जिसमें से एक फ़ाइल में उपयोग किया जाता है। pkg-config अक्सर लापता होता है (उदाहरण के लिए, PKG_CHECK_MODULES के कारण), लेकिन यह कोई अन्य पैकेज हो सकता है जो आवश्यक लेकिन अनुपस्थित मैक्रो की आपूर्ति करता है। शातिर बात, यह है कि यह अभी भी पहले से मौजूद नहीं है कॉन्फ़िगर स्क्रिप्ट लापता पैकेज के लिए जाँच कर सकता है ...

0

जब मैं amhk और uthpmock को jhbuild के साथ बनाने की कोशिश कर रहा था तो मेरे पास समान मुद्दे थे।

मुझे ऑटोकॉन्फ़-आर्काइव के सबसे हाल के संस्करण को स्थापित करने की आवश्यकता थी। निर्देश 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

मुझे मैकपोर्ट पोर्ट "ओपनकाड" के साथ एक ही समस्या थी (एक स्थानीय रूप से स्थापित मशीन पर जीआईटी रिपॉजिटरी का उपयोग करने के लिए पोर्टफ़िल को स्थानीय रूप से संशोधित)।

स्थायी फिक्स आसान है, पोर्टफाइल में pkgconfig के लिए एक निर्भरता को परिभाषित करें: depend_lib-append पोर्ट: pkgconfig

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.